【问题标题】:How to reset default app programmatically, which user previously chooses as open Always如何以编程方式重置默认应用程序,用户之前选择始终打开
【发布时间】:2016-10-26 14:14:26
【问题描述】:

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

谢谢。

【问题讨论】:

  • 一个应用不能删除其他应用作为一个意图的默认处理程序,它只能删除自己作为默认处理程序(见clearPackagePreferredActivities

标签: android


【解决方案1】:

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

【讨论】:

  • 好主意,伙计!
  • 很高兴它有帮助:D
猜你喜欢
  • 2019-08-04
  • 2020-11-09
  • 2021-02-03
  • 2011-10-07
  • 2015-09-21
  • 1970-01-01
  • 2015-02-20
  • 2010-10-29
  • 2010-10-18
相关资源
最近更新 更多