如何捕获android应用程序包删除?

时间:2017-06-19 05:52:15

标签: android

我有应用列表。我想当用户删除任何应用程序然后刷新应用程序列表。 最好的方法是什么?我使用广播接收器搜索并找到解决方案,这是最好的方法吗?或者有直接的方法吗?我可以捕获Action删除意图的结果吗?

1 个答案:

答案 0 :(得分:1)

首先,您应该为该事件添加监听器,如下所示,如果您只对删除感兴趣,只需添加,

    <receiver
        android:name=".receiver.AppStateReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter android:priority="999">
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <action android:name="android.intent.action.PACKAGE_REMOVED" />
            <action android:name="android.intent.action.PACKAGE_REPLACED" />
            <action android:name="android.intent.action.QUERY_PACKAGE_RESTART" />

            <data android:scheme="package" />
        </intent-filter>
    </receiver>

然后你可以像这样添加广播接收器,

public class AppStateReceiver extends BroadcastReceiver {

    public AppStateReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {

        String packageName = intent.getData().getEncodedSchemeSpecificPart();

        // Check if the application is install or uninstall and display the message accordingly
        if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {



        } else if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {
            intent.setAction(intent.getAction());

            Intent uninstallIntent = new Intent();

            uninstallIntent.setAction("Uninstall");
            uninstallIntent.putExtra("packageName", packageName);

            LocalBroadcastManager.getInstance(context).sendBroadcast(uninstallIntent);

        } else if (intent.getAction().equals("android.intent.action.PACKAGE_REPLACED")) {
            // Application Replaced
//            toastMessage = "PACKAGE_REPLACED: " + intent.getData().toString() + getApplicationName(context, intent.getData().toString(), PackageManager.GET_UNINSTALLED_PACKAGES);
        } else if (intent.getAction().equals("android.intent.action.QUERY_PACKAGE_RESTART")) {

        }
    }
}

当你在接收器中收到回叫时,只需发送一个本地广播,你就可以收听你的活动或片段或服务并根据它进行处理。

片段中的本地广播监听器

BroadcastReceiver UninstallReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        updateItems();
    }
};

注册并取消注册广播

LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(UninstallReceiver);
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(UninstallReceiver, new IntentFilter("Uninstall"));