如何从下载管理器的广播开始活动?

时间:2015-06-22 11:48:32

标签: android android-intent android-broadcast android-download-manager

如果有可能,我想恢复,当用户点击下载管理器的通知时,从广播接收器开始新的活动。

清单

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
    <uses-permission android:name="com.sec.android.provider.badge.permission.READ" />
    <uses-permission android:name="com.sec.android.provider.badge.permission.WRITE" />
    <uses-permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS" />
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

... 

     <receiver
                android:name=".rest.receiver.DownloadReceiver"
                android:enabled="true"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
                    <action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED"/>
                </intent-filter>
            </receiver>

广播接收器

private final static String TAG = "DownloadManagerStatus";


    @Override
    public void onReceive(Context context, Intent intent){
        String action = intent.getAction();
        Log.i(TAG, "onReceive " + action);
        if(action.equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE))
        context.startService(new Intent(context, DownloadCheckerService.class));
        else if(action.equals(DownloadManager.ACTION_NOTIFICATION_CLICKED)){
            Intent i = new Intent(context,MainActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
            context.startActivity(i);
        }
    }

如果我点击通知,当我的申请是正常的或在后台时 - 恢复正确的活动。

如果我点击通知,当我的申请被终止或未启动时(如重启后) - 广播接收者不会收到任何意图。

1 个答案:

答案 0 :(得分:0)

我认为,问题是,当你终止你的过程时,你也会杀死广播接收器。您必须为广播接收器创建单独的进程。 Should I use android: process =":remote" in my receiver?