Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.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应用程序删除_Android_Android Broadcastreceiver - Fatal编程技术网

以编程方式处理Android应用程序删除

以编程方式处理Android应用程序删除,android,android-broadcastreceiver,Android,Android Broadcastreceiver,我正在尝试处理应用程序删除。 我的AndroidManifest.xml如下所示: <uses-permission android:name="android.permission.GET_TASKS"/> <receiver android:name=".receivers.UninstallIntentReceiver"> <intent-filter android:priority="0"> <action andro

我正在尝试处理应用程序删除。 我的AndroidManifest.xml如下所示:

<uses-permission android:name="android.permission.GET_TASKS"/>

<receiver android:name=".receivers.UninstallIntentReceiver">
    <intent-filter android:priority="0">
        <action android:name="android.intent.action.QUERY_PACKAGE_RESTART" />
            <data android:scheme="package" />
    </intent-filter>
</receiver>
当应用停止时,会调用onReceive方法,但当应用运行时,不会调用onReceive方法

在这种情况下,调用onReceive:

但在这种情况下,不调用onReceive:

若我点击设置中的关闭按钮,我用箭头显示的pic,在调用onReceive方法之后

我觉得我必须告诉客人如何处理这个行为,解决这个问题

任何建议都会对我有帮助。谢谢

我正在尝试处理应用程序删除

我不确定android.intent.action.QUERY\u PACKAGE\u重启是否是您需要的目的

发件人:

询问系统服务是否有任何理由重新启动给定包。数据包含包的名称

这看起来像是系统服务所需要的操作,它甚至没有文档。还要注意@hide注释,这意味着此操作不会公开给公共API,您不应该依赖它

你感兴趣的实际行动应该是

如果我理解您的问题是正确的,那么您正在尝试处理删除同一应用程序中的应用程序的操作,这意味着您希望在用户删除Sportbook应用程序时,Sportbook应用程序中的BroadcastReceiver的onReceive方法立即被触发。这是不可能的,因为当用户卸载您的应用程序时,您的所有应用程序数据、apk、类都将被删除,因此不再存在该接收器

如果您试图检测从另一个应用程序中删除的应用程序,比如说您有两个应用程序,并且您希望跟踪用户是否删除了您的应用程序之一,那么这是有意义的,并且onReceive将按预期调用

public class UninstallIntentReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // fetching package names from extras
        LogUtils.i("HK_LOG " + this.getClass().getSimpleName(), "onReceive");

        String[] packageNames = intent.getStringArrayExtra("android.intent.extra.PACKAGES");

        if(packageNames!=null){
            for(String packageName: packageNames){
                if(packageName!=null && packageName.equals("com.betconstruct.sportsbookModule")){
                    // User has selected our application under the Manage Apps settings
                    // now initiating background thread to watch for activity
                    new UninstallActivity(context).start();

                }
            }
        }
    }
}
<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_REMOVED" />
        <data android:scheme="package"/>
    </intent-filter>
</receiver>