BluetoothLeScanner.startScan mit Android 6.0 nicht entdecken-Geräten

Ich versuche, verwenden Sie die Funktion BluatoothLeScanner.startScan anstelle des veralteten man BluetoothAdapter.startLeScan.
Gestern habe ich aktualisiert mein Nexus 5 auf Android 6.0 und seit diesem moment ist meine app funktioniert nicht mehr.
Ich mich zunächst fügen Sie die Einstellungen erforderlich ACCESS_COARSE_LOCATION wie hier gefunden, https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id.
Dann habe ich die Erlaubnis wie hier beschrieben: https://developer.android.com/training/permissions/requesting.html.
Aber am Ende scheint es nicht funktioniert, es nicht zurück zu schicken die ble Geräte.

Dies ist mein code:

manifest

<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);
            }
        }

EDIT: um dieses problem zu lösen habe ich nur eingeschaltet, das GPS. Es ist einfach zu tun, es programmatisch in auf diese Weise.

InformationsquelleAutor der Frage Jacopo Tosi | 2015-10-08

Schreibe einen Kommentar