He desarrollado una aplicación para descargar un archivo de video y almacenarlo en la tarjeta SD. En el proceso, también actualizo el progreso y el estado de la descarga como una notificación de la barra de estado usando el NotificationManager
.Android getIntent() devuelve el primer intento
Mi clase llamada DownloadTask.java
extiende el AsyncTask
. Así que aquí actualizo el progreso usando el método onProgressUpdate()
, donde utilizo el NotificationManager
para este propósito. Todo funciona a las mil maravillas excepto que, al completar la descarga, deseo hacer clic en la notificación para abrir el archivo de video específico. Así que esto es lo que he hecho:
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);
Tenga en cuenta que la fileName
y NOTIFICATION_ID
son únicos en mi caso.
El Activity
OpenDownloadedVideo.java
abre el archivo por:
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) {
//
}
}
Así que cuando me descargo un vídeo por primera vez y hacer clic en la notificación se abrirá el archivo de vídeo adecuado. Sin embargo, la próxima vez que descargue otro video y haga clic en la notificación, se abrirá nuevamente el primer archivo que se descargó.
Esto es porque getIntent
dentro de OpenDownloadedVideo
devuelve el primer Intent
creado y no el más reciente. ¿Cómo puedo corregir esto?
Además, tenga en cuenta que existe el problema cuando descargo más de un video, p. Ej. si descargo cinco archivos de video diferentes y hay cinco notificaciones en la barra de estado. El mismo archivo se abrirá cada vez que se haga clic en una notificación.
¿cómo puedo hacer eso ?? lo siento, soy bastante nuevo en esto. – Bopanna
No sé si ayudará o no. En el editor de manifiestos, usted agrega SINGLE_TOP para su modo de inicio de actividad. Luego, anula su actividad en NewIntent() y coloca el mismo código que en onCreate –
. He realizado la actividad 'OpenDownloadedVideo'' SINGLE_TOP' y dentro de la actividad he anulado el 'onNewIntent', como también sugirió. .. Pero cuando la actividad se inicia o relanza, no parece entrar en el método 'onNewIntent'. – Bopanna