2015-10-20 20 views
14

ich den folgenden Absturz bekommen, aber dies geschieht nur auf einigen Samsung-Geräten (nicht alle, entwickeln wir/Test auf Samsung-Geräten)java.lang.SecurityException: BLUETOOTH-Berechtigungsabsturz. (Samsung-Geräte)

Crash-Log:

java.lang.SecurityException: Need BLUETOOTH permission: Neither user 10025 nor current process has android.permission.BLUETOOTH. 
    at android.os.Parcel.readException(Parcel.java:1540) 
    at android.os.Parcel.readException(Parcel.java:1493) 
    at android.bluetooth.IBluetooth$Stub$Proxy.isEnabled(IBluetooth.java:1156) 
    at android.bluetooth.BluetoothAdapter.isEnabled(BluetoothAdapter.java:697) 
    at org.altbeacon.beacon.service.scanner.CycledLeScanner.finishScanCycle(CycledLeScanner.java:245) 
    at org.altbeacon.beacon.service.scanner.CycledLeScanner.scheduleScanCycleStop(CycledLeScanner.java:234) 
    at org.altbeacon.beacon.service.scanner.CycledLeScanner$1.run(CycledLeScanner.java:230) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:145) 
    at android.app.ActivityThread.main(ActivityThread.java:5972) 
    at java.lang.reflect.Method.invoke(Method.java) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

Hier mein AndroidManifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.app.myapp" > 


<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.BLUETOOTH"/> 
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 
<!-- 
    The following two permissions are not required to use Google Maps Android API v2, 
    but are recommended. We also require them for location updates. 
--> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

<permission 
    android:name=".permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name=".permission.C2D_MESSAGE" /> 

<application 
    android:name=".myapp" 
    android:allowBackup="true" 
    android:icon="@drawable/appicon" 
    android:label="@string/app_name" 
    android:logo="@drawable/action_bar_pinwheel_back" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".activities.VerifyPinActivity" 
     android:label="@string/title_activity_verify_pin" 
     android:screenOrientation="portrait" 
     android:theme="@style/NoActionBarDark" 
     android:windowSoftInputMode="stateVisible|adjustPan" > 
    </activity> 
    ...(more activities here removed) 
</application> 
</manifest> 

Ich habe wirklich keine Ahnung, warum es nur auf ein paar Geräten auftritt; Meine erste Vermutung ist, dass es etwas mit Samsung KNOX zu tun hat, und die (wenigen) Benutzer, die abstürzen, sind KNOX-Benutzer mit einer Telefonrichtlinie, Bluetooth zu deaktivieren.

Hat jemand anderes in das hineingeraten? Oder hat jemand eine Idee, was das sein könnte?

+0

Auch wenn Sie in Ihrem Manifest uses-permission haben, kann ein Benutzer jede Erlaubnis für eine bestimmte Anwendung deaktivieren, vielleicht ist dies der Fall? Eine wirklich wilde Vermutung. –

+0

Eine weitere Vermutung: Hinzufügen von android.permission.BLUETOOTH_PRIVILEGED Privileg. Vielleicht könnte diese Antwort (oder auch die nächste) http://stackoverflow.com/a/18322851/4618338 ebenfalls helfen. –

+0

@TrynkiewiczMarius Das war meine erste Schätzung. Ich vermutete etwas wie das Installieren der App in einen KNOX Sandbox-Modus und das Deaktivieren von Bluetooth innerhalb von dort? Ich bin mir nicht sicher, wie KNOX funktioniert – eric

Antwort

3

hinzufügen Wenn Sie die Benutzer sicher nur auf Samsung KNOX diese Probleme erfüllt, vielleicht die folgende Antwort wird Ihnen helfen.

Denken Schritt für Schritt ist der Weg, um Ihr Problem zu lösen.

1.This only occurs on some Samsung devices. 

Also, es hat nichts mit Ihrem Code zu tun hat, auch der permission.There ist etwas falsch mit den Samsung-Geräten.

2.Check the crash log: 
java.lang.SecurityException: Need BLUETOOTH permission: Neither user 10025 nor current process has android.permission.BLUETOOTH. 

Nach den Erfahrungen, wenn Sie das Protokoll wie getroffen haben „weder Benutzer **** noch aktuellen Prozess *** Erlaubnis hat.“, Bedeutet dies, dass Ihre App nicht habe die Erlaubnis, etwas in dem System zu tun. Dies geschieht oft auf, dass Sie etwas brauchen die System-Level-Erlaubnis.

If you are installed as system level app together with customized Android ROM,or you signed your app with the platform.x509.pem and platform.pk8 file of the customized Android ROM,and then you can have the permission. 

Jetzt prüfen, was Samsung KNOX:

Samsung Knox (stylized Samsung KNOX) is an enterprise mobile security solution.

Bluetooth ist eine Art von Datenübertragung Weg zum device.This des anderen wird das Sicherheitsproblem verursachen.

Überprüfen Sie die offizielle Website:
https://www.samsungknox.com

den Stichworten 'Bluetooth' suchen, und wir fanden diese: https://www.samsungknox.com/en/faq/are-bluetooth-bluetooth-low-energy-and-nfc-available-inside-knox-container

KNOX 2.4+ - Bluetooth, Bluetooth Low Energy (GATT) und NFC werden im KNOX-Container unterstützt.

KNOX 2.3 oder niedriger - Bluetooth, Bluetooth GATT und NFC werden im KNOX-Container nicht unterstützt. Wenn das Gerät mit einem Peripheriegerät verbunden ist (z.B.Kopfhörer) im persönlichen Bereich bleibt Bluetooth verbunden, auch wenn der Benutzer den KNOX-Container betritt. Apps im KNOX-Container können keine Bluetooth-Verbindung initiieren.

1. Wenn Ihre Benutzer verwenden KNOX 2.3 oder unter, und sie können ihre OS von Gerät zu KNOX 2.4+ .tell Ihre Benutzer, die Samsung KNOX ihre OS Geräte aktualisieren verwenden aktualisieren.

2. Wenn Ihre Benutzer verwenden KNOX 2.3 oder unter, und sie können nicht ihre OS Geräte 2.4+ .your App funktioniert nicht unter diese Situation KNOX aktualisieren, ist das Problem nicht die Problem, was Sie tun können, ist nur sagen verwendet, dass: Das Betriebssystem Ihres Geräts unterstützt nicht Bluetooth, so ist es nicht funktioniert.

3. Wenn die oben wird dir nicht helfen, können Sie Kontakt mit Samsung KNOX Official

Noch ein Tipp:
Um die Benutzerfreundlichkeit der App zu verbessern, müssen Sie Ihre App verhindern abgestürzt zu sein.
Crashed ist die schlimmste Benutzererfahrung.
Wenn Sie das Problem nicht lösen können, können Sie dies tun:

try{ 
    You code related with Bluetooth. 
    }catch (Exception e) 
    { 
    } 

Denken Sie daran: Die offizielle immer hilft Ihnen, die Probleme besser zu lösen!


0

versuchen unten an Ihrem Manifest

<uses-feature android:name="android.hardware.bluetooth" android:required="true" /> 
+0

Der Play Store erfordert bereits die Bluetooth-Funktion; Es wird automatisch hinzugefügt, wenn die Bluetooth-Berechtigung angefordert wird. Dies könnte möglicherweise daran arbeiten, dass es nicht in einer KNOX-Umgebung installiert wird? Ich bin mir nicht einmal sicher, dass KNOX hier das Problem ist. – eric

0

Von SDK 23 Weiter benötigen Sie die Berechtigung für Bluetooth, falls erforderlich, zu prüfen.

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (mContext.checkSelfPermission(Manifest.permission.BLUETOOTH) == PackageManager.PERMISSION_GRANTED) { 
//TODO - Do the work 
    } 
    } 
1

Sie können here suchen. Ich schätze, das ist dein Problem.

Sind Bluetooth, Bluetooth Low Energy und NFC im KNOX-Container verfügbar?

KNOX 2.4+ - Bluetooth, Bluetooth Low Energy (GATT) und NFC werden im KNOX-Container unterstützt.

KNOX 2.3 oder niedriger - Bluetooth, Bluetooth GATT und NFC werden im KNOX-Container nicht unterstützt. Wenn das Gerät mit einem Peripheriegerät (z. B. Kopfhörer) in dem persönlichen Raum verbunden ist, bleibt Bluetooth verbunden, selbst wenn der Benutzer den KNOX-Behälter betritt. Apps im KNOX-Container können keine Bluetooth-Verbindung initiieren.

Ich hatte nie praktische Erfahrung damit, aber ich hoffe, dass dies hilft.

0

Ab KNOX Premium v1.1 muss Samsung APK-Dateien (Third-Party-App) nicht mehr signieren, damit sie in KNOX-Containern ausgeführt werden können.Stattdessen werden die entsprechenden Berechtigungen zur Laufzeit gewährt, nachdem eine App ihre ELM- und KLM-Lizenzen erfolgreich aktiviert hat. Weitere Informationen finden Sie unter this

+0

Nicht sicher, dass dies relevant ist; Die App wird in den KNOX-Container installiert. – eric