java.lang.SecurityException: сбой разрешения BLUETOOTH. (Только для устройств Samsung)

Я получаю следующий сбой, но это происходит только на некоторых устройствах Samsung (не все, мы разрабатываем / тестируем на устройствах Samsung)

Журнал аварии:

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)

Вот мой 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>

Я действительно понятия не имею, почему это происходит только на нескольких устройствах; Я предполагаю, что это как-то связано с Samsung KNOX, и (несколько) пользователей, которые рушатся, - это пользователи KNOX, у которых политика телефона отключает Bluetooth.

Кто-нибудь еще сталкивался с этим? Или кто-нибудь знает, что это может быть?

5 ответов

Решение

Если вы уверены, что пользователи столкнулись с этой проблемой только на Samsung KNOX, следующий ответ, возможно, поможет вам.

Думая шаг за шагом, это способ решить вашу проблему.

1.This only occurs on some Samsung devices.

Таким образом, это не имеет ничего общего с вашим кодом, а также разрешением. Что-то не так с устройствами Samsung.

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

Согласно опыту, если вы встретили журнал типа "Ни пользователь ****, ни текущий процесс не имеют разрешения ***", это означает, что ваше приложение не имеет разрешения на выполнение каких-либо действий в системе. Это происходит часто для этого вам нужно разрешение на уровне системы.

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.

Теперь проверьте, что такое Samsung KNOX:

Samsung Knox (стилизованный под Samsung KNOX) - это решение для обеспечения безопасности мобильных устройств.

Bluetooth - это один из способов передачи данных на устройство другого. Это может вызвать проблемы с безопасностью.

Проверьте официальный сайт:
https://www.samsungknox.com/

Поиск по ключевым словам "Bluetooth", и мы нашли это: https://www.samsungknox.com/en/faq/are-bluetooth-bluetooth-low-energy-and-nfc-available-inside-knox-container

KNOX 2.4+ - Bluetooth, Bluetooth с низким энергопотреблением (GATT) и NFC поддерживаются внутри контейнера KNOX.

KNOX 2.3 или ниже - Bluetooth, Bluetooth GATT и NFC не поддерживаются внутри контейнера KNOX. Если устройство подключено к периферийному устройству (например, к наушникам) в личном пространстве, Bluetooth останется подключенным, даже если пользователь входит в контейнер KNOX. Приложения внутри контейнера KNOX не могут инициировать соединение Bluetooth.

1.Если ваши пользователи используют KNOX 2.3 или ниже, и они могут обновить свою ОС устройства до KNOX 2.4+. Скажите пользователям, которые используют Samsung KNOX, обновить их ОС устройства.

2.Если ваши пользователи используют KNOX 2.3 или ниже, и они не могут обновить свою ОС устройства до KNOX 2.4+. Ваше приложение не будет работать в этой ситуации, проблема не в том, что вы можете просто сказать использует это: ОС вашего устройства не поддерживает Bluetooth, поэтому он не работает.

3.Если вышесказанное вам не поможет, вы можете связаться с Samsung KNOX Official

Еще один совет:
Чтобы улучшить взаимодействие с пользователем вашего приложения, вам нужно предотвратить его сбой.
Сбой - худший пользовательский опыт.
Если вы не можете решить проблему, вы можете сделать это:

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

Помните: официальный всегда помогает вам лучше решать проблемы!


Вы можете посмотреть здесь. Я думаю, это твоя проблема.

Доступны ли Bluetooth, Bluetooth с низким энергопотреблением и NFC внутри контейнера KNOX?

KNOX 2.4+ - Bluetooth, Bluetooth с низким энергопотреблением (GATT) и NFC поддерживаются внутри контейнера KNOX.

KNOX 2.3 или ниже - Bluetooth, Bluetooth GATT и NFC не поддерживаются внутри контейнера KNOX. Если устройство подключено к периферийному устройству (например, к наушникам) в личном пространстве, Bluetooth останется подключенным, даже если пользователь входит в контейнер KNOX. Приложения внутри контейнера KNOX не могут инициировать соединение Bluetooth.

У меня никогда не было практического опыта с этим, но я надеюсь, что это поможет.

Попробуйте добавить ниже к вашему манифесту

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

Начиная с KNOX Premium v1.1, Samsung больше не нужно подписывать файлы сторонних приложений (APK), чтобы они могли работать внутри контейнеров KNOX. Вместо этого соответствующие разрешения предоставляются во время выполнения, после того как приложение успешно активирует свои лицензии ELM и KLM. для получения дополнительной информации см. это

Начиная с SDK 23 и выше, вам необходимо проверить разрешение для Bluetooth в случае необходимости.

   if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
         if (mContext.checkSelfPermission(Manifest.permission.BLUETOOTH) == PackageManager.PERMISSION_GRANTED) {
//TODO - Do the work
    }
  }
Другие вопросы по тегам