Passare i dati a BroadcastReceiver da attività utilizzando DownloadManager

Sto provando a passare un object a un BroadcastReceiver che farà qualcosa quando un download è terminato. Come posso accedere all'object Intent nel metodo onReceive di BroadcastReceiver dalla mia attività? Adesso ho questo nella mia attività:

DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); long id = manager.enqueue(request); 

e ho questo nel mio BroadcastReceiver che fa roba quando il download è completo:

  • : Ottieni l'indirizzo del path al touch
  • Utilizzando startActivityForResult, come get il requestCode nell'attività del bambino?
  • Creare un disegno personalizzato e utilizzarlo in XML
  • Eclipse JUNO non si avvia
  • angoli rotondi con colore bordo
  • Android consente all'utente di catturare foto dalla galleria o dalla camera
  •  DownloadManager mgr = (DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE); 

    Tutto funziona bene, il mio BroadcastReceiver fa quello che voglio quando il download viene completato. Ma ora voglio passare un object dalla mia attività al BroadcastReceiver. Di solito, creerei un Intento e aggiungere l'object all'intento. Ma non ho creato un intento nel mio codice perché il BroadcastReceiver risponde al download utilizzando il Context.DOWNLOAD_SERVICE.

    Nel mio BroadcastReceiver, voglio get i dati dall'object Intent nel metodo onReceive () qui:

     @Override public void onReceive(Context context, Intent intent) { intent.getParcelableExtra("object"); } 

    Come faccio a passare i dati in questo object Intent dalla mia attività? Come posso accedere? Ho provato a usare getIntent().putExtra("object", object) ma sembra essere un intento diverso da quello usato nel metodo onReceive di BroadcastReceiver perché ottengo un nullPointerException

    Modifica: qui è il mio codice appropriato in AndroidManifest.xml

     <receiver android:name="com.android.devon.appfrenzy.DownloadReceiver" android:exported="true" > <intent-filter> <action android:name="android.intent.action.DOWNLOAD_COMPLETE" /> </intent-filter> </receiver> 

  • Intenti e onActivityResult in native / JNI
  • Colore della row Android ListView
  • Come modificare la vista Vista remota in runtime
  • Aggiorna il problema di un widget di app utilizzando la raccolta
  • Android Studio con javaCv e FFMPEG
  • Errore di emulatore Android: file del kernel mancante
  • 4 Solutions collect form web for “Passare i dati a BroadcastReceiver da attività utilizzando DownloadManager”

    Prima di eseguire il download, salvare il valore in SharedPreference

     editor.putInt(MainActivity.CERIS_LAST_DW_ID_KATALOG, m_intIdKatalog); editor.commit(); 

    Poi in onReceive ottieni il valore dalla preferenza condivisa

     @Override public void onReceive(Context arg0, Intent arg1) { // TODO Auto-generated method stub SharedPreferences mCeris; mCeris = arg0.getSharedPreferences(MainActivity.CERIS_PREFERENCES, Context.MODE_PRIVATE); int m_intIdKatalog = mCeris.getInt(MainActivity.CERIS_LAST_DW_ID_KATALOG, 0); } 

    Ma ora voglio passare un object dalla mia attività al BroadcastReceiver.

    Non e ansible. Il BroadcastReceiver non esiste, tranne quando riceve la trasmissione. L'integer process è forse passato per il momento in cui il download è completo.

    È consigliabile memorizzare qualcosa in una posizione persistente ( SharedPreferences , database, file) e leggerlo da onReceive() . Questo è l'unico modo per passare i dati a un object che non esiste in un process che potrebbe non esistere.

    durante la chiamata submit trasmissione dati inviati come

      Intent i = new Intent(); i.putExtra("string_example", "here is a broadcasted string"); i.putExtra("int_example", 100); sendBroadcast(i); 

    e nel lato onReceive () ottengono i dati da Intent as

      @Override public void onReceive(Context context, Intent intent) { Log.d(getString(R.string.app_name), "broadcast string: " + intent.getStringExtra("string_example")); Log.d(getString(R.string.app_name), "extra!: " + intent.getIntExtra("int_example",0)); } 

    Modifica come ur bisogno …

    Stavo lottando per questo perché l'utilizzo dello storage locale non funziona se stai cercando di tenere traccia di download multipli in coda. Fortunatamente i brainiancs di Google passano l' Download ID come un extra, in modo da poter utilizzare:

      long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0) 

    Quindi usare

      public class DownloadReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, final Intent intent) { long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0) DownloadManager manager = (DownloadManager) context.getSystemService(DOWNLOAD_SERVICE); DownloadManager.Query query = new DownloadManager.Query(); query.setFilterById(downloadId); Cursor cursor = manager.query(query); if (cursor.moveToFirst()) { int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)); int reason = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_REASON)); } cursor.close(); } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.