无法接收PACKAGE意图的广播

时间:2009-10-20 07:41:51

标签: android

我正在尝试注册广播接收器以接收包事件的广播事件。以下是清单文件中的代码和接收器。日志状态永远不会发生,但我可以清楚地看到“HomeLoaders”(Launcher)调试语句的相同广播触发。我错过了什么?

public class IntentListener extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Log.i("INTENT LISTNER:", intent.getAction());
    }
}

<receiver android:name="IntentListener" android:enabled="true" android:exported="true">
    <intent-filter>
        <data android:scheme="package"></data>
        <action android:name="android.intent.action.PACKAGE_ADDED"></action>
        <action android:name="android.intent.action.PACKAGE_ADDED"></action>
        <action android:name="android.intent.action.PACKAGE_CHANGED"></action>
    </intent-filter>
</receiver>

3 个答案:

答案 0 :(得分:4)

清单中注册的组件可能无法接收这些Intent,但只有通过registerReceiver()以Java注册的接收方才能接收到这些{{1}}。

答案 1 :(得分:0)

这是我的清单,没有

<category android:name="android.intent.category.DEFAULT" />

我的应用仅检测到Android Market应用安装,但未删除。现在它还接收非Android Market应用广播。

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:label="@string/app_name"
        android:name=".SomeActivity" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver android:name="com.som.pakage.PackageInstallReceiver" >
        <intent-filter >
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <action android:name="android.intent.action.PACKAGE_REMOVED" />

            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="package" />
        </intent-filter>
    </receiver>
</application>

答案 2 :(得分:0)

这三个意图即

Intent.ACTION_PACKAGE_ADDED
Intent.ACTION_PACKAGE_REMOVED
Intent.ACTION_PACKAGE_CHANGED

当系统播放时,有

Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
添加了

标志,以便只有已注册的接收器才能接收广播,并且不会启动广播接收器组件。有关更多详细信息,请参阅Intent和PackageManagerService类源。