如何通过代码获取android中的默认设备辅助应用程序?

2024-01-09

我的手机安装了两个语音搜索:Google 应用程序和 S-voice 应用程序。默认应用程序是 S-voice 应用程序,如下图所示。我的问题是,我们如何在Android 6.0中使用编程方式获得默认的语音应用程序。先感谢您

这就是我所做的

private boolean isMyAppLauncherDefault(String myPackageName) {
    final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
    filter.addCategory(Intent.CATEGORY_HOME);

    List<IntentFilter> filters = new ArrayList<IntentFilter>();
    filters.add(filter);
    List<ComponentName> activities = new ArrayList<ComponentName>();
    final PackageManager packageManager = (PackageManager) getPackageManager();

    packageManager.getPreferredActivities(filters, activities, null);
    for (ComponentName activity : activities) {

        Log.d(TAG,"======packet default:==="+activity.getPackageName());
    }
    for (ComponentName activity : activities) {

        if (myPackageName.equals(activity.getPackageName())) {
            return true;
        }
    }
    return false;
}

当我的输入是时,上面的函数总是返回 truecom.samsung.voiceserviceplatform。另一方面,默认应用程序总是返回com.google.android.googlequicksearchbox(表示谷歌语音)


The DefaultAssistPreference https://github.com/android/platform_packages_apps_settings/blob/master/src/com/android/settings/applications/DefaultAssistPreference.java#L175使用隐藏方法AssistUtils https://github.com/android/platform_frameworks_base/blob/master/core/java/com/android/internal/app/AssistUtils.java#L135-L157检索当前的辅助。您可以使用反射来使用相同的方法:

public ComponentName getCurrentAssistWithReflection(Context context) {
    try {
        Method myUserIdMethod = UserHandle.class.getDeclaredMethod("myUserId");
        myUserIdMethod.setAccessible(true);
        Integer userId = (Integer) myUserIdMethod.invoke(null);

        if (userId != null) {
            Constructor constructor = Class.forName("com.android.internal.app.AssistUtils").getConstructor(Context.class);
            Object assistUtils = constructor.newInstance(context);

            Method getAssistComponentForUserMethod = assistUtils.getClass().getDeclaredMethod("getAssistComponentForUser", int.class);
            getAssistComponentForUserMethod.setAccessible(true);
            return (ComponentName) getAssistComponentForUserMethod.invoke(assistUtils, userId);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return null;
}

如果你不想使用反射,可以直接检查系统设置:

public ComponentName getCurrentAssist(Context context) {
    final String setting = Settings.Secure.getString(context.getContentResolver(), "assistant");

    if (setting != null) {
        return ComponentName.unflattenFromString(setting);
    }

    return null;
}

与读取的设置相同AssistUtils, but AssistUtils还有一个fallback https://github.com/android/platform_frameworks_base/blob/master/core/java/com/android/internal/app/AssistUtils.java#L142-L155如果设置无效。

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

如何通过代码获取android中的默认设备辅助应用程序? 的相关文章

  • 如何将react-native与php一起使用并获取返回数据始终为空

    我的回报始终为空 我似乎无法让它发挥作用 我如何将react native与php一起使用并获取json 任何人都可以帮忙吗 PHP myArray array myArray lat POST lat myArray lng POST l
  • PHP 中的 imagecolortransparent 不起作用

    我想改变图像中的白色 http www arso gov si vreme napovedi 20in 20podatki radar gif http www arso gov si vreme napovedi 20in 20podat
  • 使用其他应用程序打开 pdf

    我正在应用程序中显示 pdf 文件 我想在 nag bar 上显示 打开方式 选项 显示 iPhone 上安装的可以打开相同 pdf 的应用程序 如果用户选择任何应用程序 例如 pdf 查看器 则应该使用 pdf 查看器应用程序打开 pdf
  • WPF 网络浏览器在 Adob​​e 阅读器窗口中打开 PDF 文件

    我正在创建一个 32 位 WPF 应用程序 它需要在 WebBrowser 控件中显示创建的 PDF 在做的同时 WebBrowser Navigate new Url D TestPDF MyDocument pdf 它在 Adob e
  • 我是否需要同时处置 CRM OrganizationServiceProxy 和 OrganizationServiceContext?

    OrganizationServiceProxy 和 OrganizationServiceContext 都支持 dispose 方法 我需要将它们都包装在 using 语句中吗 using var proxy GetOrganizati
  • WPF - 将窗口置于前面

    我有一个 WPF 窗口 我没有关闭它 相反 我执行 Hide 和 Show 它 现在 当我双击记录上网格中的主窗口时 这将触发 Show 窗口 该窗口将始终显示在主窗口后面 我尝试过以下方法 但没有成功 view Show view Act
  • 如何在javascript中访问请求查询字符串参数?

    我见过许多利用 RegEx 的解决方案 坦率地说 这似乎有些可笑 因为 javascript 是如此通用 必须有一种更简单的方法来访问请求参数 有人可以给我演示一下吗 我发现了一个有用的方法网的深度 http www dotnetbull
  • a.equals(a) 什么时候返回 false?

    我想知道在哪些情况下java中的变量不能相等 使用equals 方法 自身 我这里说的不是对象而是变量本身 只要代码编译并在调用 equals 时返回 false 到目前为止 我发现的唯一情况是 public class A public
  • Haskell 中的相互递归求值器

    Update 我已经添加一个答案 https stackoverflow com questions 3524485 mutually recursive evaluator in haskell 4504200 4504200这描述了我的
  • SDK管理器不显示示例包选项

    我关注的是安卓安装示例的开发人员链接 http developer android com tools samples index html包裹 但是 当我展开Android平台的包列表时 没有 SDK示例 选项 复选框 可用 为什么 我已
  • Elasticsearch 将字符串与模糊字段相匹配

    我正在尝试将字符串与字段匹配 并且只想应用模糊性 例如 对于这些文档 title replace oilfilter title replace motoroil 以下查询应仅匹配第一个文档 Replace oilfilter Replac
  • Qt 5.15 mingw 文件夹 bin 中缺少调试 dll *d.dll

    我通过 Qt 维护工具安装了 Qt Creator 和 Qt5 15 但我在 mingw 的 bin 文件夹中缺少像 QtCored dll 这样的调试 dll 我该怎么办 None
  • MKAnnotationView 的不同字体

    在iPhone SDK地图上的标注气泡上 可以更改标题和副标题属性的字体吗 我对标注气泡中显示的默认字体不满意 并且希望使用不同的字体来匹配我的应用程序的其余部分 然而 我没有看到太多提及这一点 这让我担心这可能是不可能的 我见过构建自定义
  • 从 C# 应用程序调用 ASP.net Web 服务

    我有个问题 我如何调用 Web 服务并从 C 桌面应用程序获取结果 我正在制作一个桌面应用程序 我希望它能够连接到我的在线 ASP net Web 服务 这怎么可能 在 解决方案资源管理器 中 右键单击项目节点并选择 添加 Service参
  • AWS Fargate - 卷

    我的 docker compose 文件有问题 这是我的 docker 撰写文件 version 3 services nginx proxy image xxxxx dkr ecr xxxxx amazonaws com xxxx lat
  • 从 HashMap 中查找对象键

    我有一个 HashMap 其键作为我自己的对象 键作为 String 的 ArrayList 有没有一种方法可以从映射中获取与另一个对象相同的关键对象 而无需迭代映射 请注意 我的对象已经实现了 equals 和 hashcode 并且它只
  • 2 位小数格式的货币输入

    我需要将输入货币格式化为 2 位小数格式 例如 当用户输入 2 时 它看起来为 2 00 美元 然后当用户输入 2 时 它会转换为 22 00 美元 等等 我采用类似的方法 当用户输入 2 时 它会转换为 0 02 下一个 2 将是这样的
  • Spring Boot 应用程序崩溃

    请告诉我哪里有问题 我尝试启动我的第一个在 Spring Boot 上开发的应用程序 我已经在 SpringMVC 上有了简单的 Web 项目 现在我喜欢在 BOOT 上构建它 这是错误输出 org springframework bean
  • Prolog真的基于封闭世界假设吗?

    在下面封闭世界假设 https en wikipedia org wiki Closed world assumption 目前未知的事实是错误的 Prolog 的语义通常被认为遵循封闭世界假设 例如 here https cstheory
  • System.IO.IOException:进程无法访问文件“.txt”,因为它正在被另一个进程使用

    我正在使用下一个代码来记录 Web 应用程序的错误 using StreamWriter myStream new StreamWriter sLogFilePath true myStream WriteLine string Forma

随机推荐

  • jtable (jquery) 缺少对话框格式

    我正在尝试根据文档创建 jquery jtable入门 http www jtable org GettingStarted 每次打开对话框时 整个格式 对话框样式都会丢失 我仍然可以看到文本 按钮是链接 但看起来很糟糕 感觉就像我错过了一
  • UI5中单向绑定和一次性绑定的区别

    UI5中一次性绑定和单向绑定有什么区别 是否有任何特定于用户的用例我会使用它们中的每一个 我无法从文档中获得太多信息 One way 它能做什么 单向数据流 模型数据的变化 例如通过setProperty 会稳定地传播到 UI 中感兴趣的元
  • 如何在 React Router v4 路由之间共享应用程序状态

    我想知道我需要什么样的解决方案来解决以下问题 我不使用任何状态管理库 我 只使用 React 全局应用程序状态存储在组件中
  • “地理”类型是没有可比性的。不能在 GROUP BY 子句中使用

    我有一个这样的查询 SELECT WorkId RegisterDate Location FROM SELECT dbo Work WorkId dbo Work RegisterDate dbo Look Location FROM d
  • jQuery event.target 在 Firefox 和 IE 中不起作用?

    我正在制作一个图像滑块 使用 jQuery 加载用户单击的图像 我在 Chrome 中运行得很好 但是当我在 Firefox 和 IE 中尝试它时 它根本不加载图像 这是我的代码 img clickable click function i
  • 构建 Vue.js 应用程序时 JavaScript 堆内存不足

    我正在尝试构建一个用于生产的 vue js 应用程序 此错误消息总是在中途出现 FATAL ERROR Ineffective mark compacts near heap limit Allocation failed JavaScri
  • Redis同步复制失败场景

    在redis集群规范这里https redis io topics cluster tutorial https redis io topics cluster tutorial它提到 however note that Redis Clu
  • 如何删除消费者已经消费过的数据?卡夫卡

    我正在kafka中进行数据复制 但是 kafka 日志文件的大小增长得非常快 一天的大小达到 5 GB 作为这个问题的解决方案 我想立即删除已处理的数据 我正在 AdminClient 中使用删除记录方法来删除偏移量 但是当我查看日志文件时
  • Rails 设计禁用某些用户类型的密码恢复

    在我的 Rails 项目中 我有不同类型的用户 其中之一具有user status admin 与其他用户不同 它拥有编辑内容的完全权限 出于显而易见的原因 我想为这些类型的用户添加额外的安全性 特别是完全禁用密码恢复 覆盖标准设计密码恢复
  • 检查Python中字符串以什么数字结尾

    例如 example123 将是123 ex123ample 将是None 123example 将是None 您可以使用正则表达式re http docs python org library re html module import
  • 从 C# 中的正则表达式模式生成文本的所有排列

    所以我有一个正则表达式模式 我想生成该模式允许的所有文本排列 Example var pattern My biological real Name is Steve var permutations getStringPermutatio
  • Facebook 为 Android 安装追踪功能

    我们仍在调查为什么我们的安装没有被跟踪 我已经向 Facebook 开了另一张支持票 以澄清安装和登录是相同还是不同的事件 但我也想深入了解 Ti Facebook 模块 由于更新方便 我们一直在 Android 上进行测试 这是 Face
  • java中的try/catch块返回与finally子句[重复]

    这个问题在这里已经有答案了 给定 java 中的以下 try catch 块 try return catch SomeException e System out println e finally System out println
  • Django 或 mod_wsgi 在运行时会修改 sys.path 吗?

    我设置了 mod wsgi 并检查它工作正常 我还想出了一个简单的 django 项目 并使用以下命令检查了它是否正常工作 django admin py runserver settings mysite settings 但是 当我运行
  • jQuery() 在 jQuery.parseHTML() 结果中找不到元素

    我正在使用 QUnit 编写测试并使用 ajax 从本地运行的开发站点中提取 HTML 进行一些测试 add elements function location selector ajax location async false don
  • 在单页应用程序中创建临时 URL

    在我的基于反应的单页面应用程序中 我的页面分为两个窗格 左窗格 过滤器面板 右窗格 网格 包含通过应用过滤器的数据的表 总之 我有一个看起来与 amazon com 非常相似的应用程序 默认情况下 当用户在浏览器中点击应用程序的根端点 时
  • 删除断开连接 socket.io 上的对象

    我正在使用 Nodejs 和 Socket io 当客户端连接时 会创建新的 JavaScript 对象 这些物体会永远存在吗 当客户端断开连接时是否应该删除或删除它们 甚至可以移除一个物体吗 我知道删除是行不通的 谢谢 我想这更像是一个一
  • Django url templatetag (但不是 reverse() )错误:渲染时捕获 NoReverseMatch

    我正在尝试使用 url 模板标签 url all labs map 但是当我查看该页面时 我收到此错误 Caught NoReverseMatch while rendering Reverse for all labs map with
  • SQL Server 2016 时间戳数据类型

    我有以下问题 我正在使用一种归档软件 将其数据导出到 MS SQL 数据库 其中一列被指定为 Timestamp S 代表 unix 时间 它是一个 32 位整数 该数据库需要通过不同的报告软件进行查询 问题是报告软件要求其条目有一个名为
  • 如何通过代码获取android中的默认设备辅助应用程序?

    我的手机安装了两个语音搜索 Google 应用程序和 S voice 应用程序 默认应用程序是 S voice 应用程序 如下图所示 我的问题是 我们如何在Android 6 0中使用编程方式获得默认的语音应用程序 先感谢您 这就是我所做的