は検出されません。 昨日、Nexus 5をAndroid 6.0にアップデートしました。その瞬間から私のアプリはもう動作しません。 私は最初に必要な設定をACCESS_COARSE_LOCATIONとしてここに追加します。https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id。 次に、ここに説明されている許可を追加しました:https://developer.android.com/training/permissions/requesting.html。 しかし最後には動作していないように見えますが、それは邪悪なデバイスを返送しません。のAndroid 6.0とBluetoothLeScanner.startScanは、私は非推奨1 <em>BluetoothAdapter.startLeScan</em>するのではなく、機能<em>BluatoothLeScanner.startScan</em>を使用しようとしているデバイス
これは私のコードです:
マニフェスト
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.stm.sensitronapp">
<uses-sdk android:maxSdkVersion="23"/>
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>`
DeviceScanActivity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
if (ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED){
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_COARSE_LOCATION)) {
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
MY_PERMISSIONS_REQUEST_ACCESS_COARSE);
}
}
// Device scan callback.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
mScanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
super.onScanResult(callbackType, result);
mLeDeviceListAdapter.addDevice(result.getDevice());
mLeDeviceListAdapter.notifyDataSetChanged();
}
};
}
}
}
final BluetoothManager bluetoothManager =
(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();
if (mBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON) {
mSwipeRefreshLayout.setRefreshing(true);
mLeDeviceListAdapter.clear();
mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();
if(ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mBluetoothLeScanner.startScan(mScanCallback);
}
}
編集:私はGPSをオンにこの問題を解決します。 this wayでプログラムで簡単に実行できます。
私は同じ問題があります。回避策を見つけましたか?私は新しいスキャンAPIを試してみたいと思っていますが、両者の互換性を保つのは痛みです。 –
はい、ここには、ソリューションがあります:[Android 6.0のBluetooth Low Energy startScanはデバイスを検出しません](http://stackoverflow.com/questions/33043582/bluetooth-low-energy-startscan-on-android-6 -0-does-not-find-devices)ただし、解決策は、マニフェストに権限を追加し、ScanDeviceを使用してアクティビティの実行時に権限を追加し、GPSをオンにします。信じられないですが、私の問題はGPSオフだった –
GPSをオンにしてテストしたところ、それは機能しました(私はそれを持っていたタブレット上にありました)。 BLEデバイスの場合、デバイスにGPSチップがない場合はどうなりますか?バグはすぐに提出される必要があります。私は、大衆のためのBLEデバイスを作っているfitbitの人たちや他の人たちは、すでにこれらの質問をGoogleに打っていたと思います。 –