Asynctask を使用して、Android アプリでファイルをダウンロードしています。全体的にファイルサイズが大きいので、バックグラウンドでファイルのダウンロードを開始します。ダウンロードの進行中にユーザーがアプリの他の部分にアクセスできるように、プログレスバーなどは表示されません。
ファイルのダウンロードが完了したら、ファイルが正常にダウンロードされたことをユーザーに通知したいと思います。
onPostexecute() メソッドを使用すると、ダウンロード プロセスが開始されたときにユーザーが同じアクティビティを行っていないため、問題が発生します。その結果、コンテキストに問題があるため、onPostExecute() からのアラート ダイアログと通知を使用できません。
Asynctask のコードの下に貼り付けました。ですから、これを修正する方法を教えてください。
class DownloadProcess extends AsyncTask<Void,Void,Void>{
Context cxt;
public DownloadProcess(Context context) {
cxt=context;
}
@Override
protected Void doInBackground(Void... arg0) {
try {
String fileurl="http://www.bigfiles/" + filenm;
URL url = new URL(fileurl);
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
Path = Environment.getExternalStorageDirectory() + "/download/";
File pth=new File(Path);
File file = new File(pth,filenm);
FileOutputStream fos = new FileOutputStream(file);
InputStream is = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);
}
fos.close();
is.close();
} catch (IOException e) {
Log.d("amit", "Error: " + e);
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (((Activity) AppDet.this).isFinishing() == false) {
AlertDialog.Builder builder = new AlertDialog.Builder(AppDet.this);
builder.setMessage("The app download is complete. Please check " +Path+ " on your device and open the " + filenm+ " file downloaded");
builder.setCancelable(true);
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
MediaPlayer md=MediaPlayer.create(AppDet.this, R.raw.ding);
md.start();
}
else {
//Not sure what to do here
}
}