2015-10-20 16 views
14

che sto ricevendo l'incidente seguente, ma questo si verifica solo su alcuni dispositivi Samsung (non tutti, si sviluppano/test su dispositivi Samsung) di registrojava.lang.SecurityException: BLUETOOTH arresto autorizzazione. (dispositivi Samsung solo)

Crash:

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) 

Ecco il mio 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> 

Non ho davvero idea del motivo per cui si verifica solo su alcuni dispositivi; la mia ipotesi iniziale è che abbia qualcosa a che fare con Samsung KNOX, ei (pochi) utenti che si bloccano sono utenti KNOX con una politica del telefono per disabilitare il bluetooth.

Qualcun altro ha incontrato questo? O qualcuno ha qualche idea di cosa potrebbe essere?

+0

Anche se si dispone di permessi di utilizzo nel file manifest, un utente può disabilitare qualsiasi autorizzazione per una determinata applicazione, forse questo è il caso? Un'ipotesi davvero selvaggia. –

+0

Un'altra ipotesi: aggiunta del privilegio android.permission.BLUETOOTH_PRIVILEGED. Forse questa risposta (o anche la prossima) http://stackoverflow.com/a/18322851/4618338 potrebbe aiutare pure. –

+0

@TrynkiewiczMariusz Questa è stata la mia prima ipotesi. Stavo indovinando qualcosa come installare l'app in una modalità sandbox KNOX e disabilitare Bluetooth all'interno? Non sono sicuro di come funziona KNOX anche se – eric

risposta

3

Se sei sicuro che gli utenti soddisfatti questi problemi solo su Samsung KNOX, la seguente risposta forse vi aiuterà.

Pensare passo dopo passo è il modo per risolvere il problema.

1.This only occurs on some Samsung devices. 

Quindi, non ha nulla a che fare con il codice, anche il permission.There è qualcosa di sbagliato con i dispositivi Samsung.

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

Secondo l'esperienza, se avete incontrato il registro come "Né utente **** né processo in corso ha *** permesso.", Questo significa che la vostra applicazione non lo fa avere il permesso di fare qualcosa nel sistema. Questo succede spesso su quello che fai qualcosa è necessario il permesso a livello di sistema.

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. 

ora verificare quale sia Samsung KNOX:

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

Bluetooth è un tipo di modo di trasmissione dei dati al di altre device.This farà sì che il problema della sicurezza.

Controllare il sito ufficiale:
https://www.samsungknox.com

ricerca le parole chiave 'Bluetooth', e abbiamo trovato questo: https://www.samsungknox.com/en/faq/are-bluetooth-bluetooth-low-energy-and-nfc-available-inside-knox-container

KNOX 2.4+ - Bluetooth, Bluetooth a bassa energia (GATT) e NFC sono supportati all'interno del contenitore KNOX.

KNOX 2.3 o inferiore - Bluetooth, Bluetooth GATT e NFC non sono supportati all'interno del contenitore KNOX. Se il dispositivo è collegato a una periferica (ad es.cuffie) nello spazio personale, Bluetooth rimarrà connesso, anche se l'utente entra nel contenitore KNOX. Le app all'interno del contenitore KNOX non possono avviare una connessione Bluetooth.

1. Se gli utenti utilizzano KNOX 2.3 o al di sotto, e possono aggiornare il proprio sistema operativo del dispositivo per KNOX 2.4+ .tell gli utenti che utilizzano Samsung KNOX aggiornare il proprio sistema operativo del dispositivo.

2. Se gli utenti utilizzano KNOX 2.3 o al di sotto, e non possono aggiornare il proprio sistema operativo del dispositivo per KNOX 2.4+ .your applicazione non funzionerà in questo situazione, il problema non è il problema, ciò che puoi fare è solo dire a che: il sistema operativo del tuo dispositivo non supporta il Bluetooth, quindi non è funzionante.

3. Se quanto sopra non vi aiuterà, è possibile contattare con Samsung KNOX Official

Un altro suggerimento:
Per migliorare l'esperienza degli utenti della vostra app, è necessario per evitare che la vostra applicazione sia schiantato.
In crash è la peggiore esperienza utente.
Se non è possibile risolvere il problema, si può fare questo:

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

Ricorda: L'ufficiale aiuta sempre a risolvere i problemi di meglio!


0

provare ad aggiungere qui sotto al tuo manifesta

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

Il Play Store richiede già la funzionalità Bluetooth; viene aggiunto automaticamente quando viene richiesta l'autorizzazione Bluetooth. Questo potrebbe forse funzionare impedendo che venga installato in un ambiente KNOX? Non sono nemmeno sicuro che KNOX sia il problema qui. – eric

0

Da SDK 23 in poi è necessario controllare l'autorizzazione per bluetooth in caso necessario.

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

È possibile cercare here. Immagino che questo sia il tuo problema.

Sono disponibili Bluetooth, Bluetooth Low Energy e NFC all'interno del contenitore KNOX?

KNOX 2.4+ - Bluetooth, Bluetooth Low Energy (GATT) e NFC sono supportati all'interno del contenitore KNOX.

KNOX 2.3 o inferiore - Bluetooth, Bluetooth GATT e NFC non sono supportati all'interno del contenitore KNOX. Se il dispositivo è collegato a una periferica (ad es. Cuffie) nello spazio personale, Bluetooth rimarrà connesso, anche se l'utente accede al contenitore KNOX. Le app all'interno del contenitore KNOX non possono avviare una connessione Bluetooth.

Non ho mai avuto esperienza pratica con questo, ma spero che questo aiuti.

0

Da KNOX Premium v1.1 in poi, Samsung non deve più firmare i file di app (APK) di terzi in modo che possano essere eseguiti all'interno dei contenitori KNOX.Invece, le autorizzazioni appropriate sono concesse in fase di runtime, dopo che un'app ha attivato correttamente le sue licenze ELM e KLM. per maggiori informazioni vedi this

+0

Non sicuro che questo sia rilevante; l'app si installa nel contenitore KNOX fine. – eric

Problemi correlati