如何以编程方式重置默认应用程序,以前选择哪个用户打开始终

时间:2016-10-26 14:14:27

标签: android

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

感谢。

1 个答案:

答案 0 :(得分:4)

默认情况下,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