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.
Кто-нибудь еще сталкивается с этим? Или кто-нибудь знает, что это может быть?
Ответы
Ответ 1
Если вы уверены, что пользователи столкнулись с этими проблемами только на 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 - это один из способов передачи данных другим device.This приведет к проблеме безопасности.
Проверьте официальный сайт:
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 Low Energy (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
Еще один совет:
Чтобы улучшить пользовательский интерфейс вашего приложения, вам необходимо предотвратить разбиение приложения.
Crashed - худший пользовательский интерфейс.
Если вы не можете решить проблему, вы можете сделать это:
try{
You code related with Bluetooth.
}catch (Exception e)
{
}
Помните: официальное всегда помогает вам решить проблемы лучше!
Ответ 2
Вы можете посмотреть здесь. Думаю, это твоя проблема.
Доступны ли Bluetooth, Bluetooth Low Energy и NFC внутри контейнера KNOX?
KNOX 2.4 + - Bluetooth, Bluetooth Low Energy (GATT) и NFC поддерживаются внутри контейнера KNOX.
KNOX 2.3 или ниже - Bluetooth, Bluetooth GATT и NFC не поддерживаются внутри контейнера KNOX. Если устройство подключено к периферийному устройству (например, наушникам) в личном пространстве, Bluetooth останется подключенным, даже если пользователь входит в контейнер KNOX. Приложения внутри контейнера KNOX не могут инициировать соединение Bluetooth.
У меня никогда не было практического опыта, но я надеюсь, что это поможет.
Ответ 3
попробуйте добавить ниже к вашему манифесту
<uses-feature android:name="android.hardware.bluetooth" android:required="true" />
Ответ 4
Начиная с 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
}
}
Ответ 5
Начиная с KNOX Premium v1.1 и далее Samsung больше не нужно подписывать файлы сторонних приложений (APK), чтобы они могли запускаться внутри контейнеров KNOX. Вместо этого соответствующие разрешения предоставляются во время выполнения, после того, как приложение успешно активирует лицензии ELM и KLM. для получения дополнительной информации см. this