Tôi đã phát triển một ứng dụng để tải xuống một tệp video và lưu trữ nó trong thẻ SD. Trong quá trình này, tôi cũng cập nhật tiến trình và trạng thái tải xuống dưới dạng thông báo trên thanh trạng thái bằng cách sử dụng NotificationManager
.Android getIntent() trả về ý định đầu tiên
Lớp học của tôi được gọi là DownloadTask.java
mở rộng AsyncTask
. Vì vậy, ở đây tôi cập nhật tiến trình bằng cách sử dụng phương pháp onProgressUpdate()
trong đó tôi sử dụng NotificationManager
cho mục đích này. Tất cả mọi thứ hoạt động như một say mê ngoại trừ, khi hoàn thành tải về tôi muốn bấm vào thông báo để mở tập tin video cụ thể. Vì vậy, đây là những gì tôi đã làm:
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);
Lưu ý rằng fileName
và NOTIFICATION_ID
là duy nhất trong trường hợp của tôi.
Các Activity
OpenDownloadedVideo.java
mở tập tin bằng cách:
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) {
//
}
}
Vì vậy, khi tôi tải một đoạn video cho lần đầu tiên và click vào thông báo file video thích hợp sẽ được mở ra. Tuy nhiên lần sau khi tôi tải xuống một video khác và nhấp vào thông báo, tệp đầu tiên được tải xuống sẽ được mở lại.
Điều này là do getIntent
bên trong OpenDownloadedVideo
trả lại Intent
đầu tiên được tạo và không phải là mới nhất. Làm thế nào tôi có thể sửa lỗi này?
Ngoài ra, xin lưu ý rằng kịch bản sự cố tồn tại khi tôi tải xuống nhiều video, ví dụ: nếu tôi tải xuống năm tệp video khác nhau và có năm thông báo trên thanh trạng thái. Cùng một tệp sẽ được mở mỗi lần thông báo được nhấp.
làm thế nào để làm điều đó không ?? xin lỗi Im khá mới này. – Bopanna
Tôi không biết liệu nó có giúp ích hay không. Trong trình chỉnh sửa tệp kê khai, bạn thêm SINGLE_TOP cho chế độ Khởi chạy hoạt động của bạn. Sau đó, bạn ghi đè lên hoạt động của bạn onNewIntent() và đặt cùng một mã trong đó như bạn có trong onCreate –
Tôi đã thực hiện hoạt động 'OpenDownloadedVideo'' SINGLE_TOP' và bên trong hoạt động tôi đã ghi đè lên 'onNewIntent' cũng như bạn đề xuất .. .. Nhưng khi hoạt động được khởi động hoặc khởi động lại, dường như nó không đi vào trong phương thức 'onNewIntent'. – Bopanna