我想我在这里撞墙了。 我有两个设备:运行Android 6.0的Mediatek Desire Plus和运行Android 6.0的ASUS X008DC。 在一台设备上我运行一个ReaderActivity,另一台(ASUS)运行一个WriterActivity。 ReaderActivity应该执行以下操作:
WriterActivity应该与ReaderActivity相反:
问题:两个设备上的一切都很好用UNTIL点2.切换角色后,两个设备都看不到对方,换句话说,WriterActivity的onScanResult从未被调用过。
我已经尝试了几乎所有的东西:从重新启动蓝牙(使用异步BroadcastReceiver)到在给定的空闲时段中断两个设备上的扫描/广告,到停止WIFI连接,到......
我正是为了放弃BLE并重新使用标准蓝牙。它可能还不是一种稳定的技术。 我在这里错过了什么?在此先感谢您的时间。
编辑1:我在两个设备上都安装了Play商店的“BLE Central,Peripheral Checker”,它表示BOTH设备支持BT classic,Central和Peripheral。
答案 0 :(得分:0)
错误是一台设备,即MediaTek Desire,不需要Android 23权限请求,而另一台设备则更严格,并要求它允许扫描BLE设备。这是在onCreate方法中调用的函数,它修复了问题:
private void checkNetworkLocation() {
try {
boolean gps_enabled = false, network_enabled = false;
LocationManager localLocationManager =
(LocationManager) getSystemService(LOCATION_SERVICE);;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if ((checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
|| (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
throw new Exception();
}
}
try {
gps_enabled = localLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch(Exception ex) {}
try {
network_enabled = localLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch(Exception ex) {}
if(!gps_enabled && !network_enabled) {
new AlertDialog.Builder(this).setMessage("Location service is disabled, please enable it to find BLE devices.").setCancelable(false).setNeutralButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface paramAnonymousDialogInterface, int paramAnonymousInt) {
DeviceScanActivity.this.startActivityForResult(new Intent("android.settings.LOCATION_SOURCE_SETTINGS"), 0);
}
}).show();
}
return;
} catch (Exception e) {
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
}
}