如何以编程方式设置可发现时间而无需用户确认?

2023-11-21

我通常用这个

private void ensureDiscoverable() {
    if(D) Log.d(TAG, "ensure discoverable");
    if (mBluetoothAdapter.getScanMode() !=
            BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
        Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
        discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
        startActivity(discoverableIntent);
    }
}

但这会提示用户确认。有没有办法以编程方式绕过这个?

另外,我想关于“总是可以发现的”没有“新闻”mode" ?


经过一番研究后,我得出的结论是,在没有用户交互的情况下设置可发现超时只能通过 root 访问来实现(如前面的答案中已经建议的那样)。然而,对于有需要的人来说,这是必要的解决方案:

private void ensureBluetoothDiscoverability() {
    try {
        IBluetooth mBtService = getIBluetooth();
        Log.d("TESTE", "Ensuring bluetoot is discoverable");
        if(mBtService.getScanMode() != BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
            Log.e("TESTE", "Device was not in discoverable mode");
            try {
                mBtService.setDiscoverableTimeout(100);
                // mBtService.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE, 1000);
            } catch(Exception e) {
                Log.e("TESTE", "Error setting bt discoverable",e);
            }
            Log.i("TESTE", "Device must be discoverable");
        } else {
            Log.e("TESTE", "Device already discoverable");
        }
    } catch(Exception e) {
        Log.e("TESTE", "Error ensuring BT discoverability", e);
    }    
}


<uses-permission android:name="android.permission.WRITE_SETTINGS" />  
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />

然后创建一个新包android.bluetooth,将两个文件放入IBluetooth.aidl和IBluetoothCallback.aidl中,并将代码放入其中,如图所示here.

这将允许访问标准 API 上不可用的功能,但对于其中一些功能,您将需要“写入安全设置”的权限(上面的注释行是您将因缺乏进程权限而出现异常的地方/用户)。

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

如何以编程方式设置可发现时间而无需用户确认? 的相关文章

随机推荐

  • iOS16+ 横向显示 UIViewController 仅适用于单屏无法工作 [Swift 5.7]

    在 iOS 16 之前 横向呈现单屏对于纵向应用来说是可以的 工作代码如下 Remark 整个应用程序仅处于纵向模式 override public var shouldAutorotate Bool return false overri
  • 按下按钮即可在听筒和扬声器之间切换

    我试图通过在扬声器和耳机之间切换按钮来播放两者的音频 问题是我试图默认从耳机播放音频 但没有任何结果 然后 当我按下按钮切换到扬声器时 仍然没有音频播放 我正在从本地原始文件播放 我在清单中也有 android permission MOD
  • Internet Explorer 忽略某些域上的 cookie(无法读取或设置 cookie)

    我有一个网站 例如example com 用户可以在其中设置自己的子域 一个用户 一个子域 并上传自己的脚本 例如http somedomain example com xyzzy php将映射到 www somedomain xyzzy
  • Knockout.js 在半大型数据集下非常慢

    我刚刚开始使用 Knockout js 一直想尝试一下 但现在我终于有了借口 但是 当将表绑定到相对较小的一组表时 我遇到了一些非常糟糕的性能问题 数据 大约 400 行左右 在我的模型中 我有以下代码 this projects ko o
  • EditText 自定义字符串格式

    我搜索了与我的问题类似的每个问题 但没有成功 我的问题是这样的 我想格式化一个字符串EditText打字时 格式是这样的 它始终是一个 19 位数字 012345 01 0123456789 0 正如您所看到的 我想在用户打字时需要时添加空
  • 判断状态栏是在顶部还是底部?

    我想弄清楚如何判断状态栏的位置 顶部或底部 我尝试检查HierarchyViewer但没有看到状态栏视图 我真正需要弄清楚的是 在给定上下文的情况下 返回一种方法boolean 如果栏位于顶部则为 true 如果不在顶部则为 false 就
  • 如何确定 System.Diagnostics.Process 是 32 位还是 64 位?

    I tried process MainModule FileName Contains x86 但它引发了 x64 进程的异常 Win32Exception 仅完成了 ReadProcessMemory 或 WriteProcessMem
  • 在页面加载时重复并添加列到标题和项目模板

    除了显示数据表中的数据之外 我没有使用中继器 我正在构建一个网格 它显示用户列表和用户已分配的角色列 用复选框显示 下面用 true false 显示 但假装它们是复选框 ex 代表姓名 呼叫者 结案者 经理 超级用户 鲍勃 真实 真实 假
  • 如何使用 Nokogiri 将嵌套哈希转换为 XML

    我有很多级别的嵌套哈希 例如 foo gt bar foo1 gt foo2 gt bar2 foo3 gt bar3 foo4 gt foo5 gt bar5 我怎样才能将它们转换成这样的XML
  • 如何选择 nHibernate 子查询结果的 Count(*)

    为了在 nHibernate 中分页查询 我需要执行以下操作 Select count from Select e ID e Name from Object as e where 我尝试过以下方法 select count from Ob
  • C# 将字符串“0”解析为整数

    我有一台新笔记本电脑在工作 本周早些时候运行的代码今天不起作用 之前工作的代码经过简化 while dr Read int i int Parse dr GetString 1 现在 当数据库值为 0 时 它会失败 有时 但不可靠 这会起作
  • 使用 pandas 创建矩阵结构

    我已将包含代码和系数数据的以下 CSV 文件加载到以下数据框 df 中 CODE COEFFICIENT A 0 5 B 0 4 C 0 3 import pandas as pd import numpy as np df pd read
  • PHP 中的 A* 搜索算法 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有没有人有实施A 算法在 PHP 中 我知道维基百科有一个伪代码和一个 C 伪代码的链接 但我似乎找不到已经用 PHP 编写的伪代码 我也在寻找一种高效的书面 A 算法 None
  • 理解java 8流的过滤方法

    我最近了解到StreamJava 8 中的 s 并看到了这个示例 IntStream stream IntStream range 1 20 现在 假设我们想要找到第一个既能被 3 又能被 5 整除的数字 我们可能会filter两次并且fi
  • 具有特定类型的 Backbone.Js 集合

    我有一个名为 History 的 BackboneJS 集合 它可以包含多个 Backbone JS 模型之一 从 HistoryItem 扩展 而 HistoryItem 又从 Backbone Model 扩展 我试图找到一种在加载时重
  • 身份“iPhone Developer”与钥匙串中任何有效、未过期的证书/私钥对不匹配

    我想在设备中测试我的应用程序 但我被这个错误困扰了几个小时 身份 iPhone Developer 与钥匙串中任何有效 未过期的证书 私钥对不匹配 我已经关注了本指南 我在 stackoverflow 上搜索了类似的问题 这可能会有所帮助
  • 检查颜色是否为蓝色(ish)、红色(ish)、绿色(ish)、

    我想实现一个可以按颜色过滤图像的搜索 我的图像模型最多包含该特定图像中出现的 10 个 UIColor 现在我想要一个过滤器 例如蓝色 绿色 红色 黄色 如何检查 使用指定的容差 该特定图像是否包含蓝色 绿色 我尝试使用 CIE94 差异
  • 如何破译 boost asio ssl 错误代码?

    我在 boost asio ssl 实现中偶尔会出现通信失败 boost 返回的超级有用的错误消息是 asio ssl 336458004 我怀疑数字是由 SSL 标志组成的某种聚合构造 我说因为 linux 错误代码 boost asio
  • 从 FileSystemWatcher 错误中恢复的最佳实践是什么?

    After a FileSystemWatcher Error事件被提出 我不知道下一步该做什么 该例外可以是 相对 较小的例外 例如 目录中一次更改太多 这不会影响观察者的观看过程 但它也可能是一个大问题 例如观看的目录被删除 在这种情况
  • 如何以编程方式设置可发现时间而无需用户确认?

    我通常用这个 private void ensureDiscoverable if D Log d TAG ensure discoverable if mBluetoothAdapter getScanMode BluetoothAdap