如何在Android中卸载应用程序时获取通知?

时间:2014-05-19 14:43:17

标签: android android-intent broadcastreceiver

我想在应用程序要卸载时收到通知,我已经google了但我在BroadCastReceiver类中使用了这个方法

 public void onReceive(Context ctx, Intent intent) {
    Uri data = intent.getData();
    Log.d("TAG", "Action: " + intent.getAction());
    Log.d("TAG", "The DATA: " + data);


    if (intent.getAction (). equals ("android.intent.action.PACKAGE_ADDED")) {
        String packageName = intent.getDataString ();
        System.out.println ("installed:" + packageName + "package name of the program");
        Toast.makeText(ctx, "installed:" + packageName + "package name of the program", Toast.LENGTH_LONG).show();
        }
        if (intent.getAction (). equals ("android.intent.action.PACKAGE_REMOVED")) {
        String packageName = intent.getDataString ();
        System.out.println ("uninstall:" + packageName + "package name of the program");
        Toast.makeText(ctx, "uninstall:" + packageName + "package name of the program", Toast.LENGTH_LONG).show();  
        }
    }

并添加Android Manifest类

<receiver android:name="PackageChangeReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_REPLACED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />

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

但是当我安装应用程序然后它显示消息但是当我们卸载应用程序时它没有显示消息。有人建议使用rooting但我很困惑我不知道如何以编程方式创建root设备?

我的问题是: - 1.每当我们从设备卸载应用程序时如何显示消息? 2.如果可以不使用生根设备,请指导我或提供一些方法或代码。 3.如果只能使用生根设备那么请帮我解决一下如何实现它?

提前致谢

2 个答案:

答案 0 :(得分:1)

无法通知应用程序正在删除自己的程序包。

严格来说,就应用程序开发人员而言,没有办法解决这个问题。除了卸载的应用程序之外,您还需要设备上的其他内容,只有在设备已植根或者您构建自定义ROM时才能执行此操作。如果您要将应用分发给公众,则无法在最终用户的设备上执行此类标准。

答案 1 :(得分:0)

卸载应用程序时会通知应用程序,但在安装时会通知应用程序。要在另一个应用程序安装时安装应用程序,请在onReceive()方法中使用它

if (intent.getAction (). equals ("android.intent.action.PACKAGE_ADDED")) {
            String packageName = intent.getDataString ();
            System.out.println ("installed:" + packageName + "package name of the program");
            Toast.makeText(ctx, "installed:" + packageName + "package name of the program", Toast.LENGTH_LONG).show();


    File apkfile = new File(your_apk_file_path_here);
            if (!apkfile.exists()) {
                return;
            }
            Intent installIntent = new Intent(Intent.ACTION_VIEW);
            installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            installIntent.setDataAndType(
                    Uri.parse("file://" + apkfile.toString()),
                    "application/vnd.android.package-archive");
            startActivity(installIntent);
    }