4

私がコーディングしているアプリは、/ sdcardの下のディレクトリに特別なZIPファイルがあるかどうかをチェックし、ない場合はダウンロードと解凍を開始します。ダウンロードと解凍は、サブディレクトリを使用している場合でも機能します。しかし、完了したらアプリを再起動する必要がありますが、それは機能しません。

最初は、再起動の目的のためだけに特別なアクティビティ「PreMainActivity.java」があります。

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class PreMainActivity extends Activity
{

/**
 * 
 */
public static Boolean   ENABLE_RESTART  = false;

@Override
public void onCreate(final Bundle savedInstanceState)
{

    super.onCreate(savedInstanceState);
    PreMainActivity.ENABLE_RESTART = true;
    restartMain();
}

@Override
public void onRestart()
{

    super.onRestart();
    restartMain();
}

/**
 * 
 */
public void restartMain()
{

    if (PreMainActivity.ENABLE_RESTART == true)
    {
        final Intent mainIntent = new Intent(this, MainActivity.class);
        mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(mainIntent);
        finish();
    }
    else
    {
        finish();
    }
    PreMainActivity.ENABLE_RESTART = false;
}
}

次に、DownloadFile.java内にいくつかのコードを取得しました

@Override
protected void onPostExecute(final String result)
{

    MainActivity.mProgressDialogDownload.dismiss();
    PreMainActivity.ENABLE_RESTART = true;
    final Intent i = new Intent(MainActivity.this, PreMainActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(i);
}

私が調査した限り、MainActivityのコンテキストをDownloadFile.javaに渡す必要がありますが、それでも方法がわかりません。同じパッケージ内の別のファイルでAsyncTaskにコンテキストを渡す方法のヒントを誰かに教えてもらえますか?または、AsyncTaskが終了した後にアプリ全体を再起動する方法に関する他のヒントはありますか?

4

2 に答える 2

1

Current Activity Contextを次のように渡すには、AsyncTaskのコンストラクターを作成する必要があります。

   public Context ctx;

    public Your_AsyncTask_Class_Name (Context context){
        super();
        this.ctx=context;

    }
  ......
@Override
protected void onPostExecute(final String result)
{

    MainActivity.mProgressDialogDownload.dismiss();
    PreMainActivity.ENABLE_RESTART = true;
    final Intent i = new Intent(ctx, PreMainActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(i);
}

アクティビティから、コンテキストを次のように渡すことができます。

AsyncTask_Class_Name asyktaskobj=new AsyncTask_Class_Name(this);
asyktaskobj.execute(); 
于 2012-10-05T17:05:58.087 に答える
0

次のようにmain.activityを再起動するだけです。

Intent intent = getIntent(); 
finish(); 
startActivity(intent);

質問を参照してください: Androidアクティビティを再開するにはどうすればよいですか

于 2012-10-05T17:11:42.450 に答える