Android getIntent()返回第一个intent

前端之家收集整理的这篇文章主要介绍了Android getIntent()返回第一个intent前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我开发了一个应用程序来下载视频文件并将其存储在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,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) {
        //
    }
}

因此,当我第一次下载视频并单击通知时,将打开相应的视频文件.但是,下次当我下载另一个视频,然后单击该通知时,将再次打开下载的第一个文件.

这是因为OpenDownloadedVideo中的getIntent返回创建的第一个Intent而不是最新的Intent.我怎么能纠正这个?

此外,请注意,当我下载多个视频时存在问题场景,例如:如果我下载五个不同的视频文件,状态栏中有五个通知.每次单击通知时都会打开相同的文件.

解决方法

实际上你只需要使用PendingIntent.FLAG_UPDATE_CURRENT创建PendingIntent,如下所示:
mContentIntent = PendingIntent.getActivity(mContext,PendingIntent.FLAG_UPDATE_CURRENT);
原文链接:https://www.f2er.com/android/317542.html

猜你在找的Android相关文章