動画ファイルをダウンロードして SD カードに保存するアプリケーションを開発しました。その過程で、ダウンロードの進行状況とステータスを、NotificationManager
.
と呼ばれる私のクラスは、をDownloadTask.java
拡張しAsyncTask
ます。onProgressUpdate()
そのため、ここでは目的のために を使用するメソッドを使用して進行状況を更新しNotificationManager
ます。ダウンロードが完了したら、通知をクリックして特定のビデオファイルを開くことを除いて、すべてが魅力のように機能します。だからこれは私がやったことです:
mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
int icon = android.R.drawable.stat_sys_download_done;
long when = System.currentTimeMillis();
mNotification = new Notification(icon, "", when);
mContentTitle_complete = mContext.getString(R.string.download_complete);
notificationIntent = new Intent(mContext,OpenDownloadedVideo.class);
notificationIntent.putExtra("fileName", file);
mContentIntent = PendingIntent.getActivity(mContext, 0, notificationIntent, 0);
mNotification.setLatestEventInfo(mContext, file, mContentTitle_complete, mContentIntent);
mNotification.flags = Notification.FLAG_AUTO_CANCEL;
mNotificationManager.notify(NOTIFICATION_ID, mNotification);
fileName
私の場合、とNOTIFICATION_ID
は一意であることに注意してください。
はActivity
OpenDownloadedVideo.java
、次の方法でファイルを開きます。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
fileName = getIntent().getExtras().getString("fileName");
Intent i = new Intent(Intent.ACTION_VIEW);
File videoFileToPlay = new File(Environment.getExternalStorageDirectory()+"/MyFolder"+"/"+fileName);
i.setDataAndType(Uri.fromFile(videoFileToPlay), "video/*");
startActivity(i);
finish();
} catch(Exception e) {
//
}
}
そのため、初めてビデオをダウンロードして通知をクリックすると、適切なビデオ ファイルが開かれます。ただし、次回別のビデオをダウンロードし、通知をクリックすると、ダウンロードされた最初のファイルが再び開かれます。
これは、getIntent
insideが最新のものではなく、OpenDownloadedVideo
最初に作成されたものを返すためです。Intent
どうすればこれを修正できますか?
また、複数のビデオをダウンロードした場合にも問題が発生することに注意してください。たとえば、5 つの異なるビデオ ファイルをダウンロードし、ステータス バーに 5 つの通知が表示された場合などです。通知をクリックするたびに同じファイルが開かれます。