以编程方式处理Android App

时间:2017-05-04 10:04:58

标签: android android-broadcastreceiver

我正在尝试删除应用。 我的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>

UninstallIntentReceiver.java

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

                }
            }
        }
    }
}

当应用停止时,会调用onReceive()方法,但是当应用运行时,onReceive()方法不会被调用。

在这种情况下,onReceive()被称为:

- in this case onReceive called.

但是在这种情况下,onReceive()而不是调用: but in this case onReceive not called

如果我点击关闭按钮(来自我用箭头显示的设置,图片),则在调用onReceive()方法之后。

我觉得我必须客人如何处理这个动作,并解决这个问题。

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

1 个答案:

答案 0 :(得分:1)

  

我正在尝试处理移除应用。

我不确定android.intent.action.QUERY_PACKAGE_RESTART是您需要的意图。

来自javadocs

  

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

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

您感兴趣的实际操作应为android.intent.action.PACKAGE_REMOVED

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

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

如果您尝试检测从其他应用程序中删除应用程序(假设您有2个应用程序,并且您想跟踪用户是否删除了您的某个应用程序),那么这将是有意义的,{{1将按预期调用。