知道何时以编程方式删除应用程序

Know when an app has been programatically deleted

我在 Android 中使用 Intent 以编程方式卸载应用程序,如下所示:

Uri packageURI = Uri.parse("package:"+packageName);
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);

重定向到询问您是否要卸载该应用程序的提示。 通常在那之后,您会在屏幕底部看到提示信息,表示该应用程序已卸载。但我希望能够收到通知,以便我可以删除视图中的卸载按钮。

如何在代码中知道程序包卸载完成?或者如果发生错误?或者甚至,如果用户单击“确定”卸载或如果他改变主意单击“取消”,我怎么知道? 有可能知道这些吗?有没有其他方法可以卸载软件包(不是系统应用程序)并收到通知?

感谢您的阅读。如果您需要更多信息,请告诉我。

好吧,我最终找到了一个解决方案,当一个包被删除时,有一个可以被接收者拾取的意图。

在我的 AndroidManifest 中

<application
        <!--...-->
        <receiver
            android:name=".UninstalledBroadcastReceiver"
            android:enabled="true">
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_REMOVED"/>
                <data android:scheme="package"/>
            </intent-filter>
        </receiver>
</application>

创建一个扩展普通 BroadcastReceiver 的 UninstalledBroadcastReceiver class

public class UninstalledBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // handle the intent here
    }
}

例如,您可以检查您安装的应用程序的包名称是否与您自己的相匹配,并对其进行处理。在我的例子中,我在 UninstalledBroadcastReceiver 中放置了一些静态字段,包​​括一个接口,以便我可以执行一些回调。不要认为你可以在构造函数中传递字段,因为对象是在接收到意图时创建的。