Android: 如何检测主播应用是否被删除?

Android: How to detect if a broadcaster application is deleted?

我有 2 个应用程序。其中一个正在连续广播自定义字符串,另一个正在接收。当广播应用程序被删除时,我必须得到通知并删除接收应用程序中的一些数据。有没有像 onDelete() 之类的方法?我该怎么做?

是啊!有一个名为 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>

然后需要创建上面提到的class

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

不确定你想什么时候做,但据我了解,你想让你的第二个应用程序知道第一个应用程序何时被删除?

如果是这样,请执行以下操作:

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 结合使用,否则其他操作将停止工作。

希望这有效。