Ho sviluppato un'applicazione per scaricare un file video e memorizzarlo nella scheda SD. Durante il processo, aggiorno anche l'avanzamento e lo stato del download come notifica della barra di stato utilizzando lo NotificationManager
.Android getIntent() restituisce il primo tentativo
La mia classe denominata DownloadTask.java
estende AsyncTask
. Quindi qui aggiorno i progressi usando il metodo onProgressUpdate()
dove in I uso lo NotificationManager
per lo scopo. Tutto funziona come un fascino, tranne che, al termine del download, voglio fare clic sulla notifica per aprire il file video specifico. Quindi questo è quello che ho fatto:
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);
Si noti che il fileName
e NOTIFICATION_ID
sono unici nel mio caso.
Il Activity
OpenDownloadedVideo.java
apre il file:
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) {
//
}
}
Così, quando a scaricare un video per la prima volta e fare clic sulla notifica sarà aperto il file video appropriato. Tuttavia la prossima volta quando scaricherò un altro video, e clicco sulla notifica, il primo file che è stato scaricato verrà riaperto.
Questo perché getIntent
all'interno di OpenDownloadedVideo
restituisce il primo Intent
creato e non l'ultimo. Come posso correggere questo?
Inoltre, si noti che lo scenario del problema si verifica quando si scarica più di un video, ad es. se scarico cinque diversi file video e ci sono cinque notifiche nella barra di stato. Lo stesso file verrà aperto ogni volta che si fa clic su una notifica.
come faccio che ?? scusa Sono abbastanza nuovo per questo. – Bopanna
Non so se sarà di aiuto o meno. Nell'editor manifest aggiungi SINGLE_TOP per la modalità di avvio dell'attività. Quindi sostituisci l'attività suNewIntent() e inserisci lo stesso codice lì presente su onCreate –
Ho eseguito l'attività 'OpenDownloadedVideo'' SINGLE_TOP' e all'interno dell'attività ho sovrascritto 'onNewIntent' e hai suggerito .. .. Ma quando l'attività viene lanciata o rilanciata, non sembra entrare nel metodo 'onNewIntent'. – Bopanna