如何在android中检测到特定包的删除?

emn*_*mna 2 android package

是否有可能在android中检测到特定应用程序的删除?如果有,怎么样?这个我的代码检测到删除任何包,如何更改它以检测所需的应用程序?

import android.content.*;
import android.util.Log;

public class PackageChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context ctx, Intent intent) {
if(intent.getAction().equals("android.intent.action.PACKAGE_REMOVED"))   {Log.i("action","the package is removed");}
}
}
Run Code Online (Sandbox Code Playgroud)

这是显而易见的

<receiver android:name="PackageChangeReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

Ted*_*opp 6

我认为您不能过滤特定包名称的广播.但是,您可以在收到广播时轻松检索(然后测试)包名称:

Uri uri = intent.getData();
String pkg = uri != null ? uri.getSchemeSpecificPart() : null;
Run Code Online (Sandbox Code Playgroud)

(在DevDaily.com上有一个很好的示例类,PackageMonitor,它是我上面代码片段的源代码.)

  • 但除非你真的需要,否则请不要这样做.实际上需要这么做的原因很少.如果你能发布你想要完成的事情,那将是非常好的,因此可以解决潜在的需求.对于没有充分理由这样做的应用程序是令人讨厌的,因为这意味着每次用户安装或更新您启动的应用程序.现在,如果用户在其设备上使用的10个应用程序执行此操作,则会导致糟糕的体验.不要成为其中一个应用程序. (2认同)