android:以编程方式选择默认启动器

2024-02-23

我想弹出一个对话框,让用户选择要启动的启动器设置为默认选项。我试过

Intent home = new Intent(Intent.ACTION_DEFAULT);
home.addCategory(Intent.CATEGORY_LAUNCHER);
Intent chooser = Intent.createChooser(home, "Launcher");
context.startActivity(chooser);

但弹出的对话框没有设置默认值的选项。如果已经设置了默认启动器,则以下代码将不会弹出对话框。

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);

如何才能做到这一点?


尝试使用以下方法:

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);

如果已设置默认操作(yours),你可以先调用:

getPackageManager().clearPackagePreferredActivities(getPackageName());

如果默认操作不是您的,您无法以编程方式清除它,您可以做的是检查其他应用程序是否设置为默认值并显示一条消息。

private boolean isMyLauncherDefault() {
    PackageManager localPackageManager = getPackageManager();
    Intent intent = new Intent("android.intent.action.MAIN");
    intent.addCategory("android.intent.category.HOME");
    String str = localPackageManager.resolveActivity(intent,
          PackageManager.MATCH_DEFAULT_ONLY).activityInfo.packageName;
    return str.equals(getPackageName());
}

作为将其他应用程序设置为默认情况下的解决方法,您可以创建一个fake主页,安装它(这将强制系统清除默认应用程序),然后卸载它...

清单.xml

<activity
        android:name="FakeHome"  android:enabled="false">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.HOME"/>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

假主页.java

public class FakeHome extends Activity {

}

某处

if (!isMyLauncherDefault()) {           
    PackageManager p = getPackageManager();
    ComponentName cN = new ComponentName(getApplicationContext(), FakeHome.class);
    p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

    Intent selector = new Intent(Intent.ACTION_MAIN);
    selector.addCategory(Intent.CATEGORY_HOME);            
    startActivity(selector);

    p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);            
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android:以编程方式选择默认启动器 的相关文章

随机推荐

  • 后台核心数据更新

    我基本上需要在后台线程中更新核心数据而不阻塞 UI 并保存它 保存后应重新加载表视图以查看更改 所以为了做到这一点我想使用 dispatch async dispatch get global queue DISPATCH QUEUE PR
  • android 模拟器 2.2 中的相机问题

    我遇到一个问题 在 android 2 2 模拟器中 相机无法工作 它会自动关闭相机 但这个问题在android 1 5模拟器中不会发生 为什么会发生这种情况 任何机构都可以帮忙吗 这是一个已知问题 并且已被多次询问 这里有一些可能的解决方
  • 为什么 AMD GCN 使用非零 NULL?

    这次提交 https reviews llvm org rL289252 says In amdgcn https en wikipedia org wiki Graphics Core Next目标 全局 常量和通用地址空间中的空指针取值
  • 如何将打印输出分配给变量?

    如何分配输出print函数 或任何函数 到变量 举个例子 import eyeD3 tag eyeD3 Tag tag link some file mp3 print tag getArtist 我如何分配输出print tag getA
  • 如何从文件中获取数字并将其放入数组中? [复制]

    这个问题在这里已经有答案了 所以我的程序应该生成 30 个随机数 将它们放入文件中 然后将这些数字保存在数组中 但是当我尝试打印文件中的数字时 它们不是文件中的数字 而是一些随机的大数字 include
  • 跨页面存储信用卡信息的安全方法 ASP.NET MVC

    我正在运行 ASP NET MVC 需要一种安全的方式来临时存储信用卡数据 我有一个订单确认页面 该页面会发布到实际处理订单的操作 我尝试了 TempData 但它无法在帖子中幸存下来 由于会话存储在服务器上 我可以安全地使用它吗 Than
  • 使用 PHP unlink() 方法后获取 0KB 文件

    我正在尝试删除服务器上的文件 下面是我使用的代码 function ServerDel file file realpath file echo file fh fopen file w or die can t open file fcl
  • android: 库模块中的 fcm

    我在将 Firebase Cloud Messaging 集成到库模块中时面临一个奇怪的问题 我正在开发一个图书馆项目 在该项目中我需要处理来自图书馆本身的 FCM 服务器的通知 我不知道这是否可能 我遵循的步骤 我在 Firebase 控
  • Angular 的多种布局

    我正在构建一个 Angular 应用程序 但在如何处理主页方面遇到了一些障碍 主页有 90 的不同 只有标题保持不变 在那里我有显示用户登录状态的指令 为了利用路由 模板等 我理想地希望将我的 ngview 显示在示例的白色区域中 一切正常
  • 使用 git 管理 virtualenv 状态:这会导致问题吗?

    我目前已经以一种完全正确的方式设置了 git 和 virtualenv 满足我的需求 到目前为止 还没有造成任何问题 不过我知道 我的设置是非标准的 我想知道是否有人更熟悉 virtualenv 内部结构可以指出是否以及哪里可能出错 My
  • 从浏览器中删除历史点

    我们可以删除在网络浏览器中创建的历史记录点吗 或者当示例链接 某些链接 时是否可以不添加历史点 被点击并且浏览器中的 url 发生变化 您无法从浏览器历史记录中删除项目 但可以将新文档加载到窗口中并bypassjavascript 的历史
  • HNS 失败并出现错误:参数不正确

    我正在使用 Visual Studio 2017 制作一个 Docker 容器化应用程序 当首先通过 Visual Studio 运行 docker 时 出现错误 ERROR client version 1 22 is too old 通
  • 由于组合框未突出显示,如何“获取”WPF 组合框 PART_EditableTextbox?

    每次单击按钮时 我的 WPF 组合框都会填充一组不同的字符串 窗口上还有其他控件 组合框是窗口中的 第一个 顶部 但文本不会突出显示 当用户通过控件切换时 文本会突出显示 但当它是窗口上的第一个时 文本不会突出显示 也许我需要在组合框本身
  • Python:使用自定义分隔符格式化字符串[重复]

    这个问题在这里已经有答案了 EDITED 我必须使用字典中的值格式化字符串 但该字符串已经包含大括号 例如 raw string DATABASE name DB NAME 但是当然 raw string format my diction
  • 在 Active Directory 中,什么是资源?

    在 AAD node js 库的示例和测试中 00000002 0000 0000 c000 000000000000始终作为资源传递 什么是00000002 0000 0000 c000 000000000000 The 文档 https
  • 函数中的空参数不为 Null

    鉴于这个基本功能 Function TestFunction Param int Par1 string Par2 string Par3 If Par1 ne Null Write Output Par1 Par1 If Par2 ne
  • Scala 检查元素是否存在于列表中

    我需要检查列表中是否存在字符串 并调用相应接受布尔值的函数 是否可以通过一个衬垫来实现这一目标 下面的代码是我能得到的最好的 val strings List a b c val myString a strings find x gt x
  • 从Python中的文本文件中删除二进制数据

    我有一个包含一些二进制数据的文本文件 当我使用 Python 3 在文本模式下读取文件时 我收到一个 UniCodeDecodeError 编解码器无法解码字节 其中包含以下代码行 fo open myfile txt r for line
  • Yii2:scenario()模型方法

    有2个需要的功能 注册时设置密码和如果用户忘记密码则更改密码 用户注册时 密码长度必须至少为4个字符 当更改通过时 至少 5 个字符 视图对于注册和更改通行证很常见 显然 还存在两种操作 其中使用 注册 或 更改 场景 模型中的代码片段 p
  • android:以编程方式选择默认启动器

    我想弹出一个对话框 让用户选择要启动的启动器设置为默认选项 我试过 Intent home new Intent Intent ACTION DEFAULT home addCategory Intent CATEGORY LAUNCHER