我正在编写一个应用来评估Android上蓝牙P2P网络的可行性.
我注意到在Galaxy Nexus上,它使用非常少的电池,而在Nexus S上,它可以非常快速地耗尽电池.这是由于蓝牙导致的高CPU负载直接导致的.
现在,我想收集有关我的应用程序在其安装的设备上导致多少电池耗尽的信息.简单地记录时间与电池电量是没有用的,因为我不知道设备何时在使用,即使我记录了,我也不知道用户是在播放3D游戏而是通过WiFi播放或阅读电子书变暗的屏幕.
为了使问题变得更糟,并非我的应用程序引起的所有电池使用都归因于电池屏幕 - 例如,有些被列为"蓝牙"(再次,取决于设备).
是否有任何简单,隐私保护的方式来获取有关非根设备的有用信息?这些设备不在我的控制之下.我不能简单地在菜单中查看,我不能使用ADB.
我试图通过蓝牙连接两个不成对的Android设备用于P2P网络.不需要MitM保护.Android拥有createInsecureRfcommSocketToServiceRecord
并且listenUsingInsecureRfcommWithServiceRecord
为此(从API级别10开始),它在现代设备上完美运行.但是,在Galaxy Ace(Android 2.3.3 = API级别10,与Galaxy Nexus连接)上,它会创建一个配对对话框.这在传入和传出连接上都会发生.(更新:将Galaxy Ace更新到Android 2.3.6显然可以解决问题.是否有特定的Android版本始终/永远不会这样做?)
在接受配对后,连接起作用.出于这个原因,我认为这与问题40101无关:createInsecureRfcommSocketToServiceRecord导致Android 4.2上的配对对话框,只有在服务记录不存在时才会发生.
我认为在它出现的设备上无法避免这个对话框(如果可以,解释如何做到这一点是一个有效的答案).出于这个原因,我想知道什么时候提出这样的对话.我没有在Android Java源代码中找到任何东西(它本身很快就会出现).我怀疑它与蓝牙版本有什么关系,因为Ace有蓝牙2.1,它应该支持所需的"正常工作"连接.
如果有任何东西可以让我检测设备是否支持连接而不弹出对话框,或者它是否明确固定到某个Android版本,那将极大地帮助我.
此外,我正在寻找一种方法来轻松排除这些设备.