- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
更新
我尝试了很多代码,也来自互联网上显示的示例。他们每个人都遵循我的方法。经过几个小时的测试,我得出的结论是在Android 6.0上无法实现未知设备的蓝牙发现,我们只能检索绑定(bind)的设备。我很确定这个 Android 版本有一些东西。
如果有人知道如何解决这个问题,我将不胜感激。
原帖
我的代码运行良好,但找不到任何设备。我只收到 DISCOVERY_STARTED 和 DISCOVERY_FINISHED,因此没有找到任何设备,但使用系统应用程序可以找到这些设备。
这是我的应用代码,希望对你有帮助。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bluetoothAdapter= BluetoothAdapter.getDefaultAdapter();
//other stuff...
IntentFilter filter=new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(myreceiver,filter);
}
final BroadcastReceiver myreceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.i("test","RECEIVED: "+ action);
if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
}
else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
}
if(BluetoothDevice.ACTION_FOUND.equals(action))
{
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Log.i("test", device.getName() + "\n" + device.getAddress());
}
}};
public void scanDevices(View v){
if (bluetoothAdapter.isEnabled()){
bluetoothAdapter.startDiscovery();
}
}
我已经设置了权限:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
最佳答案
非常简单的解决方案:
<强>1。为 list 添加 FINE_LOCATION 权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<强>2。在运行时请求 FINE_LOCATION 权限:
//since i was working with appcompat, i used ActivityCompat method, but this method can be called easily from Activity subclassess.
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},MY_PERMISSION_REQUEST_CONSTANT);
<强>3。实现 onRequestPermissionsResult 方法:
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSION_REQUEST_CONSTANT: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//permission granted!
}
return;
}
}
}
这一切都是因为 Marshmallows 需要此权限才能使用蓝牙进行发现。
由于该权限属于Dangerous权限组,简单地在 list 中声明是行不通的,我们需要用户的明确同意才能使用该位置(即使我们不需要实际上的位置)。
关于Android 6.0 - 蓝牙 - 不存在 Action_Found 广播 Intent 的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38188887/
这个问题在这里已经有了答案: Android 6.0 - Bluetooth - No code exists for Action_Found broadcast intent (1 个回答) 关
我有一个蓝牙设备。 如果: 他们已经配对并连接到设备 它变得不插电 然后它会重新插入 我想自动连接到它。这就是我听 ACTION_FOUND 的原因。 我的代码相当简单。 ACTION_BOND_ST
使用 Log 类跟踪运行时显示 onReceive() 方法没有调用,为什么? 动态注册广播接收器 private void discoverDevices () { Log.e("MOHA
我正在通过实现一项任务来实现蓝牙支持,该任务在后台搜索设备并在搜索完成时提供列表。但是,此列表有时包含 No devices found条目(仅当收到 ACTION_DISCOVERY_FINISHE
我正在尝试计算蓝牙 RSSI 并找到了一些示例,但是 broadcastReceiver 不工作。代码是这样的: private final BroadcastReceiver receiver =
我正在尝试通过我的应用程序管理多个蓝牙事件,这样用户就不需要离开应用程序并尝试从 Android 设置中搜索/配对蓝牙设备。 我能够枚举以前配对的设备并开始发现,但是我找不到附近的设备。 背景信息:
这个简单的广播接收器从不接收任何东西。没有从 BluetoothDevice 发现设备,也没有从 BluetoothAdapter 开始/停止发现。 在代码的前面,我检查蓝牙是否已启用,Bluetoo
更新 我尝试了很多代码,也来自互联网上显示的示例。他们每个人都遵循我的方法。经过几个小时的测试,我得出的结论是在Android 6.0上无法实现未知设备的蓝牙发现,我们只能检索绑定(bind)的设备。
我是一名优秀的程序员,十分优秀!