Android PackageBroadcastReceiver在应用程序关闭后不工作
我有一个PackageBroadcastReceiver在后台运行正常。我需要它在关闭时继续侦听添加/删除的包。但事实并非如此 有没有办法用广播接收器来实现这一点,或者我应该转向服务 代码如下:Android PackageBroadcastReceiver在应用程序关闭后不工作,android,broadcastreceiver,android-service,Android,Broadcastreceiver,Android Service,我有一个PackageBroadcastReceiver在后台运行正常。我需要它在关闭时继续侦听添加/删除的包。但事实并非如此 有没有办法用广播接收器来实现这一点,或者我应该转向服务 代码如下: <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <use
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="23" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.cresan.antivirus.StockingActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="com.tech.applications.coretools.advertising.PackageBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_INSTALL" />
<action android:name="android.intent.action.PACKAGE_ADDED" />
<data android:scheme="package"/>
</intent-filter>
</receiver>
</application>
干杯。要做到这一点,您肯定需要实现后台服务。看 然后,您可以通过编程方式在服务中注册BroadcastReceiver:
private PackageBroadcastReceiver packageBroadcastReceiver;
@Override
public void onCreate() {
super.onCreate();
this.packageBroadcastReceiver = new PackageBroadcastReceiver();
this.packageBroadcastReceiver.setPackageBroadcastListener(new IPackageChangesListener() {
public void OnPackageAdded(Intent i) {
//do something here- probably start an activity
}
...
});
IntentFilter packageFilter = new IntentFilter("android.intent.action.PACKAGE_ADDED");
packageFilter.addAction("android.intent.action.PACKAGE_INSTALL");
packageFilter.addDataScheme("package");
this.registerReceiver(this.packageBroadcastReceiver, packageFilter);
}
@Override
public void onDestroy(){
super.onDestroy();
this.unregisterReceiver(this.packageBroadcastReceiver);
}
尝试在服务中注册广播接收器。活动被销毁后,接收器将被销毁到,因此您将不会收到广播事件。请发布您的代码,这可能是您正在寻找的内容,这将保持服务运行,如果服务关闭,它将重新启动服务。我知道服务将在后台直播,但广播接收器似乎是收听意图的正确选择。我读到android<3.1 BroadcastReceivers在后台时一直在接收意图通知。最新版本似乎不会出现这种情况。我找不到解决堆栈溢出问题的用例,我想这样做是为了将BroadcastReceiver的生命周期绑定到服务,而不是活动。我说得对吗?
private PackageBroadcastReceiver packageBroadcastReceiver;
@Override
public void onCreate() {
super.onCreate();
this.packageBroadcastReceiver = new PackageBroadcastReceiver();
this.packageBroadcastReceiver.setPackageBroadcastListener(new IPackageChangesListener() {
public void OnPackageAdded(Intent i) {
//do something here- probably start an activity
}
...
});
IntentFilter packageFilter = new IntentFilter("android.intent.action.PACKAGE_ADDED");
packageFilter.addAction("android.intent.action.PACKAGE_INSTALL");
packageFilter.addDataScheme("package");
this.registerReceiver(this.packageBroadcastReceiver, packageFilter);
}
@Override
public void onDestroy(){
super.onDestroy();
this.unregisterReceiver(this.packageBroadcastReceiver);
}