问题描述
这是我用来尝试启动蓝牙发现的代码。但是,我总是以“无法开始发现”消息结尾(请参见下面的代码)。
设备:运行Android 10 API 29的Pixel 3
来自成绩文件:
minSdkVersion 16
targetSdkVersion 30
来自清单文件:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.BLUetoOTH"/>
<uses-permission android:name="android.permission.BLUetoOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-feature android:name="android.hardware.bluetooth" />
来自Java:
if (bluetoothAdapter==null)
Log.i("BT","First must enable BT");
else
{
if(bluetoothAdapter.getState()==bluetoothAdapter.STATE_ON)
{
Log.i("BT","BT State on");
if (bluetoothAdapter.isdiscovering()) {
Log.i("BT","was already discovering");
bluetoothAdapter.canceldiscovery();
}
if(bluetoothAdapter.startdiscovery())
Log.i("BT","starting discovery");
else
Log.i("BT","Unable to start discovery");
}
else
Log.i("BT","BT State NOT on");
}
谢谢!
解决方法
因此,尽管清单具有所有权限,但系统拒绝了该应用程序的位置服务,并且当我进入电话菜单中的“位置”设置时,我的应用程序甚至都没有列出。我必须转到下拉菜单并启用“显示系统”,然后出现了许多其他名称奇怪的应用程序,其中包括我的应用程序。我启用了“ alwasys allow”,现在BT正在发现附近的设备。
如何在运行时请求此权限,然后确保无需进入“设置”菜单即可获得权限?