如何以编程方式重置默认应用程序,哪个用户先前选择为“打开始终”?
预期的最终结果是当用户下次查看文件时再次显示应用选择器。

谢谢。

最佳答案

默认情况下,Android不允许这样做。安全原因等。

但是,存在漏洞-每次系统识别到添加了可以处理给定意图的新组件时,默认重置便会出现。

因此,您将需要执行以下操作:

public void resetDefault() {
    PackageManager manager = getPackageManager();
    ComponentName component = new ComponentName("com.example.app", "com.mypackage.Component");
    manager.setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
    manager.setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}


com.mypackage.Component是一个虚拟Activity,您可以在清单中找到它,并且默认情况下未启用它。它需要具有一个IntentFilter,其中包含要用作默认应用程序的Intent,如下所示:

<activity
    android:name="Component"
    android:enabled="false">
    <intent-filter>
        <action android:name="android.intent.action.SOME_ACTION" />
        <category android:name="android.intent.category.SOME_CATEGORY" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>


该方法将启用虚拟组件,系统将被通知已添加新的可能的接收器(例如,在安装新的启动器时也会发生这种情况),并将重置默认值。该代码将禁用该虚拟对象,因此它不会显示在选择器中。

您可能需要检查您的应用程序是否为默认应用程序,以及是否存在默认应用程序。有关如何执行此操作的详细信息,请参见this answer

09-05 02:13
查看更多