Jac*_*osi 46 android bluetooth bluetooth-lowenergy android-6.0-marshmallow
我正在使用Nexus 5开发一个使用蓝牙低功耗的应用程序.它在Lollipop上工作,现在它不能用于Marshmallow.我在清单和活动中的runTime上设置了ACCESS_COARSE_LOCATION和ACCESS_FINE_LOCATION权限.
这是ScanFilters列表:
mScanFilterTest = new ScanFilter.Builder().build();
mScanFilter = new ArrayList<ScanFilter>();
mScanFilter.add(mScanFilterTest);
Run Code Online (Sandbox Code Playgroud)
这些是设置:
mScanSettings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_POWER).setReportDelay(0)
.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES).build();
Run Code Online (Sandbox Code Playgroud)
这些是我的回调:
mBLEScan = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
super.onScanResult(callbackType, result);
Log.i(TAG, "******************************************");
Log.i(TAG, "The scan result " + result);
Log.i(TAG, "------------------------------------------");
}
};
Run Code Online (Sandbox Code Playgroud)
这是我的电话:
mBluetoothLeScanner.startScan(mScanFilter, mScanSettings, mBLEScan);
Run Code Online (Sandbox Code Playgroud)
它开始扫描但没有找到任何设备.请帮我!!!!
V-P*_*PTR 64
我在同样的问题上挣扎.要解决此问题,您必须在手机设置中启用"位置"(GPS),并在运行时请求应用程序中的位置权限.两者都需要完成扫描才能正常工作.
要请求位置权限,请将以下内容放入对话框或类似内容中:
yourActivity.requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, yourPermissionRequestCode);
Run Code Online (Sandbox Code Playgroud)
并实施:
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults){
if(requestCode == yourPermissionRequestCode)
{
... //Do something based on grantResults
}
}
Run Code Online (Sandbox Code Playgroud)
in yourActivity和处理用户选择的任何内容.您还需要执行以下操作才能打开设备的位置服务:
Intent enableLocationIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
yourActivity.startActivityForResult(enableLocationIntent, yourServiceRequestCode);
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式检查用户是否打开了位置服务:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == yourServiceRequestCode)
{
...//Do whatever you need to
}
}
Run Code Online (Sandbox Code Playgroud)
在yourActivity.您还可以通过执行以下操作手动打开位置(GPS)服务:
Enter phone settings -> Select "Location" -> Then turn it on
它应该在手机设置中如下所示:

或者在快速设置下拉菜单中这样:

用户启用权限并启动位置服务后,您应该开始扫描.我注意到,如果您在启用权限/启用位置服务时已经扫描,它仍然不会在您的内容中放置任何内容onScanResults
我不确定这是否是iBeacons /蓝牙广告的错误或"功能"(注意:广告与销售产品而非技术蓝牙广告一样),以便公司可以查看您的位置并将您引导到他们想要的位置.
希望这可以解决您的问题!
编辑
我想添加:你只需要这个扫描.连接到BLE设备后,您可以关闭手机上的位置服务,但仍然可以连接到您的设备.但是,您无法发现或连接到任何新设备,并且所有广告设备都将从中删除onScanResults
| 归档时间: |
|
| 查看次数: |
39024 次 |
| 最近记录: |