Android:如何检测是否删除了广播应用程序?

时间:2016-05-05 22:59:33

标签: android uninstall broadcast

我有2个申请。其中一个是连续播放自定义字符串,另一个正在接收。在删除广播应用程序时,我必须收到通知并删除接收器应用程序中的一些数据。是否有像onDelete()之类的方法?我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

呀!有一个叫做ACTION_PACKAGE_REMOVED的意图你可以听。

在清单中的<application>内添加:(不要忘记更改包名称)

  <receiver android:name="com.arjnklc.receiverapp.UninstallReceiver">
   <intent-filter>
        <action android:name="android.intent.action.PACKAGE_REMOVED"/> 
        <data android:scheme="package" />
   </intent-filter>
  </receiver>

然后你需要创建上面提到的类。

public class UninstallReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
  if(intent.getData().getSchemeSpecificPart() == "com.arjnklc.broadcasterapp")
      cleanUpEverything();
 }
}

答案 1 :(得分:0)

不完全确定您想要做什么,但根据我的理解,您希望第二个应用程序知道何时删除第一个应用程序?

如果是这种情况,请执行以下操作:

AndroidManifest.xml 中,您必须有一个新的BroadcastReceiver,因为此接收器使用了不同的数据方案:

<receiver
    android:name=".PackageReceiver"
    android:enabled="true"
    android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_ADDED" />
        <data android:scheme="package" />
    </intent-filter>
</receiver>

然后是您的BroadcastReceiver

public class PackageReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if (action.equals(Intent.ACTION_PACKAGE_REMOVED)) {
            Log.d(TAG, "ACTION_PACKAGE_REMOVED");

            String data = intent.getData().toString();
            // data string has the package name
            // if that is your package name, your first app was uninstalled
        }
    }
}

请确保,它是一个单独的BroadcastReceiver。它不能与任何其他Receiver结合使用,否则其他操作将停止工作。

希望这有效。