使用DownloadManager从Activity传递数据到BroadcastReceiver

the*_*ler 6 android android-intent

我试图将一个对象传递给BroadcastReceiver,它将在下载完成后执行某些操作.如何从我的活动中访问BroadcastReceiver的onReceive方法中的Intent对象?现在我在我的活动中有这个:

DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
long id = manager.enqueue(request);
Run Code Online (Sandbox Code Playgroud)

我在我的BroadcastReceiver中有这个,它在下载完成时完成:

DownloadManager mgr = (DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE);
Run Code Online (Sandbox Code Playgroud)

一切正常,我的BroadcastReceiver在下载完成时做了我想要的.但现在我想将一个对象从我的活动传递给BroadcastReceiver.通常,我只是创建一个Intent并将该对象添加到Intent.但是,我没有在我的代码中创建一个Intent,因为BroadcastReceiver使用Context.DOWNLOAD_SERVICE响应下载.

在我的BroadcastReceiver中,我想在onReceive()方法中从Intent对象获取数据:

@Override
public void onReceive(Context context, Intent intent)
{
    intent.getParcelableExtra("object");
}
Run Code Online (Sandbox Code Playgroud)

如何从我的活动中将数据传递到此Intent对象?我该如何访问它?我尝试使用getIntent().putExtra("object", object)但它似乎是一个不同于在BroadcastReceiver的onReceive方法中使用的Intent,因为我得到一个nullPointerException

编辑:这是我在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>
Run Code Online (Sandbox Code Playgroud)

Plu*_*gie 2

在执行下载之前,将值保存在SharedPreference中

editor.putInt(MainActivity.CERIS_LAST_DW_ID_KATALOG, m_intIdKatalog);
editor.commit();
Run Code Online (Sandbox Code Playgroud)

然后在 onReceive 中从 Shared Preference 中获取值

@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);   
}
Run Code Online (Sandbox Code Playgroud)