Ich bin neu in Android App Entwicklung und BLE, und ich lerne diese mit dem Beispielcode BluetoothLeGatt [Die ich aus Android Studio importiert]. Der Code funktioniert auf meinem Tablet (Android 5.0) einwandfrei, aber die Scan-Aktivität gibt keine BLE-Geräte auf Android 6.0 zurück. Die Fehlermeldung, die ich bekam, ist unten gezeigt.Wie kann ich BluetoothleGatt ändern, um die BLE-Geräteüberprüfung unter Android 6.0 zu aktivieren?
07-19 12:41:39.615 7617-7642/? W/Binder: Caught a RuntimeException from the binder stub implementation.
java.lang.SecurityException: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to get scan results
at android.os.Parcel.readException(Parcel.java:1599)
at android.os.Parcel.readException(Parcel.java:1552)
at android.bluetooth.IBluetoothGatt$Stub$Proxy.startScan(IBluetoothGatt.java:772)
at android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper.onClientRegistered(BluetoothLeScanner.java:331)
at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:56)
at android.os.Binder.execTransact(Binder.java:458)
ich bei der Post sah Bluetooth Low Energy startScan on Android 6.0 does not find devices und die offizielle Seite Requesting Permissions at Run Time, aber ich weiß noch nicht wirklich, wie mein Code zu ändern.
Ich habe die Berechtigungen von GPS, ACCESS_FINE_LOCATION und ACCESS_COARSE_LOCATION hinzufügen, und ich schaltete den Location Service auf meinem Tablet.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-feature android:name="android.hardware.location.gps" />
Aber die App kann immer noch keine BLE-Geräte zurückgeben. Wenn ich versuche, den folgenden Code in meine App einzufügen (von Anfordern von Berechtigungen zur Laufzeit), gibt es immer einen Fehler bei checkSelfPermission [Kann das Symbol 'checkSelfPermission' nicht auflösen]. Aber ich habe importiert import android.support.v4.content.ContextCompat;
Kann mir jemand dabei helfen? Gibt es auch eine einfachere Antwort auf die Frage, wie DeviceScanActivity funktioniert? Ich weiß nicht wirklich, wo man die Blöcke des Codes von Requests Berechtigungen zur Laufzeit zu meinem Code :(Ich weiß, das ist eine wirklich dumme Frage, aber ich bin wirklich neu in diesem Bereich. Bitte helfen Sie mir !.
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
EDIT Das folgende ist meine Abhängigkeiten blockieren
dependencies {
compile "com.android.support:support-v4:25.3.1"
compile "com.android.support:support-v13:25.3.1"
compile "com.android.support:cardview-v7:25.3.1"
compile "com.android.support:appcompat-v7:25.3.1"
}
Auf welche SDK-Ebene zielt Ihre Anwendung ab (wie in der Datei 'build.gradle' der Anwendung definiert)? – stkent
Auch, was enthält Ihr 'Abhängigkeiten' Block? (Vielleicht bearbeiten Sie diese in Ihre Frage :)) – stkent
Meine Ziel-SDK-Ebene ist 25 in build.gradle Datei. – Natalie