gpt4 book ai didi

Android getIntent() 返回第一个 Intent

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:48:13 26 4
gpt4 key购买 nike

我开发了一个应用程序来下载视频文件并将其存储在 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);

请注意,fileNameNOTIFICATION_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 而不是最新的。我该如何纠正这个问题?

此外,请注意,当我下载多个视频时会出现问题,例如如果我下载了五个不同的视频文件并且状态栏中有五个通知。每次单击通知时都会打开同一个文件。

最佳答案

/**
* Override super.onNewIntent() so that calls to getIntent() will return the
* latest intent that was used to start this Activity rather than the first
* intent.
*/
@Override
public void onNewIntent(Intent intent){
super.onNewIntent(intent); // Propagate.
setIntent(intent); // Passing the new intent to setIntent() means this new intent will be the one returned whenever getIntent() is called.
}

关于Android getIntent() 返回第一个 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12107906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com