Android 添加的意图包未注册

Android 添加的意图包未注册,android,android-intent,broadcastreceiver,package,Android,Android Intent,Broadcastreceiver,Package,您好,我正在尝试检测已安装的应用程序,以便对该应用程序进行一些分析,我正在使用在stackoverflow上找到的这个示例来侦听当前应用程序中的包安装,但我的logcat中没有发生任何事情 void registerReceiver() { IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); filter.addAction(Intent.ACTION_PACKAGE_REMOVED);

您好,我正在尝试检测已安装的应用程序,以便对该应用程序进行一些分析,我正在使用在stackoverflow上找到的这个示例来侦听当前应用程序中的包安装,但我的logcat中没有发生任何事情

void registerReceiver() {
    IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
    filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
    filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
    filter.addDataScheme("package");

}

public void onReceive(Context context, Intent intent) {
    String actionStr = intent.getAction();
    if (Intent.ACTION_PACKAGE_ADDED.equals(actionStr)) {
        Uri data = intent.getData();
        String pkgName = data.getEncodedSchemeSpecificPart();
        //handle package adding...
        Log.i("Logging Service", pkgName);

    }

}

<receiver android:name="RealTimeActivity">
    <intent-filter>
   <category android:name="android.intent.category.DEFAULT" />
    <action android:name="android.intent.action.PACKAGE_ADDED"  />
    <action android:name="android.intent.action.PACKAGE_CHANGED" />
    <action android:name="android.intent.action.PACKAGE_INSTALL" />
    <action android:name="android.intent.action.PACKAGE_REMOVED" />
    <action android:name="android.intent.action.PACKAGE_REPLACED" />
    </intent-filter>
 </receiver>


<uses-permission android:name="android.permission.BROADCAST_PACKAGE_ADDED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_CHANGED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_INSTALL" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REPLACED" />
void registerReceiver(){
IntentFilter筛选器=新的IntentFilter(添加了Intent.ACTION\u包);
filter.addAction(Intent.ACTION\u PACKAGE\u已删除);
filter.addAction(Intent.ACTION\u PACKAGE\u已更改);
filter.addDataScheme(“包”);
}
公共void onReceive(上下文、意图){
字符串actionStr=intent.getAction();
if(意图.行动_程序包_添加.等于(行动){
Uri data=intent.getData();
字符串pkgName=data.getEncodedSchemeSpecificPart();
//处理程序包添加。。。
Log.i(“日志服务”,pkgName);
}
}

由于自Android 3.1以来广播行为发生了变化,您的应用程序必须先启动,然后才能接收应用程序安装/删除意图。看歌舞伎的回答

以下接收器在Android 4.0设备上为我工作(我在应用程序中有一个活动,首先启动活动,即应用程序也启动,然后接收器可以接收广播)



(一些应用程序运行一个虚拟粘性服务来保持应用程序进程的活动状态,以便它们可以接收某些广播)

所以虚拟服务只是一个内部没有任何内容的服务吗?我认为您没有在清单文件中给出接收者的路径,就像在同一个/当前应用程序包中或在不同的位置一样。
<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_ADDED" />
        <action android:name="android.intent.action.PACKAGE_CHANGED" />
        <action android:name="android.intent.action.PACKAGE_REMOVED" />
        <data android:scheme="package" />
    </intent-filter>
</receiver>