Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android PackageBroadcastReceiver在应用程序关闭后不工作_Android_Broadcastreceiver_Android Service - Fatal编程技术网

Android 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

我有一个PackageBroadcastReceiver在后台运行正常。我需要它在关闭时继续侦听添加/删除的包。但事实并非如此

有没有办法用广播接收器来实现这一点,或者我应该转向服务

代码如下:

<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);
}