安卓应用逆向中BLE的ScanSettings/AdvertiseSettings非公开方法疑问
问题解答
你遇到的是三星(Samsung)的自定义私有BLE扩展接口,前缀sem是Samsung Extension Module的缩写,属于三星给自家设备ROM定制的系统级API,普通第三方应用默认没有调用权限。
1. 关于入参为100的setAdvertiseMode/setScanMode
三星在官方标准的3种BLE模式之外,自定义了模式值100,用来标识「自定义参数模式」,只有传入100时,系统才会读取后续sem开头方法设置的自定义广播/扫描参数,用自定义值替代官方模式预设的固定参数。官方标准模式的入参0/1/2对应预设的广播/扫描间隔,100是三星独有的触发自定义参数的开关值。
2. 关于无公开文档的sem前缀方法
这些是三星ROM私有的隐藏API,没有纳入AOSP开源代码,也没有公开文档,只有签名匹配的系统应用、或者三星授权的合作方应用才能调用,普通第三方应用调用会因为权限不足、或者方法不存在(非三星设备上压根没有这个扩展实现)直接抛出NoSuchMethodError或者SecurityException异常。
两个方法的实际作用如下:
semSetCustomAdvertiseInterval(long interval):自定义BLE广播的间隔时间,单位为毫秒,仅当setAdvertiseMode传100时生效,不受官方预设的低功耗/平衡/低延迟三种固定间隔限制。semSetCustomScanParams(long window, long interval):自定义BLE扫描的窗口和间隔时间,仅当setScanMode传100时生效,可灵活调整扫描功耗和灵敏度的平衡。
调用前提
若要测试相关功能,必须满足两个条件:
- 运行在搭载三星官方ROM的设备上,第三方ROM、其他品牌安卓设备均无对应扩展实现。
- 应用获得三星的系统签名授权,或申请三星Knox SDK相关权限,普通未授权应用无法直接调用。
内容的提问来源于stack exchange,提问作者Brum
相关产品推荐
相关产品推荐

