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.

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


person eric    schedule 20.10.2015    source источник
comment
Даже если у вас есть разрешение на использование в вашем манифесте, пользователь может отключить любое разрешение для данного приложения, может быть, это так? Действительно дикая догадка.   -  person Trynkiewicz Mariusz    schedule 27.10.2015
comment
Еще одно предположение: добавление привилегии android.permission.BLUETOOTH_PRIVILEGED. Возможно, этот ответ (или даже следующий) stackoverflow.com/a/18322851/4618338 также может помочь.   -  person Trynkiewicz Mariusz    schedule 27.10.2015
comment
@TrynkiewiczMariusz Это тоже было мое первое предположение. Я предполагал что-то вроде установки приложения в изолированный режим KNOX и отключения Bluetooth там? Я не знаю, как работает KNOX.   -  person eric    schedule 27.10.2015


Ответы (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», и мы нашли это: knox-container" rel="nofollow">https://www.samsungknox.com/en/faq/are-bluetooth-bluetooth-low-energy-and-nfc-available-inside-knox-container

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

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.

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

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

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


person ifeegoo    schedule 01.11.2015

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

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

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

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

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

person Assaf Gamliel    schedule 02.11.2015

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

<uses-feature android:name="android.hardware.bluetooth" android:required="true" />
person fatboy    schedule 29.10.2015
comment
В Play Store уже требуется функция Bluetooth; он автоматически добавляется, когда запрашивается разрешение Bluetooth. Возможно, это поможет запретить его установку в среде KNOX? Я даже не уверен, что здесь проблема с KNOX. - person eric; 31.10.2015

Начиная с 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
    }
  }
person Madhukar Hebbar    schedule 02.11.2015

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

person Sulabh Deep Puri    schedule 02.11.2015
comment
Не уверен, что это актуально; приложение нормально устанавливается в контейнер KNOX. - person eric; 03.11.2015