【问题标题】:Know when an app has been programatically deleted知道何时以编程方式删除了应用程序
【发布时间】:2020-12-03 06:19:28
【问题描述】:

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

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

重定向到询问您是否要卸载应用程序的提示。 通常之后,您会在屏幕底部看到一个吐司,说明应用程序已被卸载。但我希望能够收到通知,以便删除视图中的卸载按钮。

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

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

【问题讨论】:

  • 你可以从 startActivityForResult() 开始。未经测试。
  • 我想我可以试试看。不确定它是否对我有用。谢谢!

标签: android android-intent uninstallation


【解决方案1】:

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

在我的 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 类

public class UninstalledBroadcastReceiver extends BroadcastReceiver {

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    相关资源
    最近更新 更多