java.lang.SecurityException: BLUETOOTH permission 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)

这是我的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>

我真的不知道为什么它只发生在几个设备上;我最初的猜测是它与三星KNOX有关,而(少数)正在崩溃的用户是KNOX用户,他们的手机策略是禁用蓝牙。

还有人遇到这种情况吗?或者有人知道这是什么吗?

如果您确定用户只在三星KNOX上遇到这个问题,下面的答案可能会对您有所帮助。

一步一步地思考是解决问题的方法。

1.This only occurs on some Samsung devices.

所以,它与你的代码无关,也与权限无关。有三星的设备有问题。

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

根据经验,如果您遇到了像"Neither user**** nor current process has *** permission.",这意味着你的应用程序没有权限在系统中做某事。这发生通常情况下,你做一些事情需要系统级的权限。

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是一个企业级移动安全解决方案。

蓝牙是一种数据传输方式设备。这将导致安全问题。

查看官网:
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+ - KNOX容器内支持蓝牙、低功耗蓝牙(GATT)和NFC。

KNOX 2.3或以下 -在KNOX容器内不支持蓝牙,蓝牙GATT和NFC。如果设备连接到个人空间的外设(例如耳机),即使用户进入KNOX容器,蓝牙也会保持连接。KNOX容器内的应用程序无法启动蓝牙连接。

1。如果您的用户正在使用KNOX 2.3或以下,他们可以将设备的操作系统更新为KNOX 2.4+。告诉你的用户谁在用三星KNOX更新他们的设备操作系统。

2。如果您的用户正在使用KNOX 2.3或以下,并且他们无法将设备的操作系统更新到KNOX 2.4+。您的应用程序将无法在此下工作情况下,问题不是问题,你能做的只有告诉使用:你的设备的操作系统不支持蓝牙,所以它不是工作。

3。如果以上不能帮助你,你可以联系三星KNOX官方

另一个提示:
为了改善应用程序的用户体验,你需要防止应用程序崩溃。崩溃是最糟糕的用户体验
如果你不能解决这个问题,你可以这样做:

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

记住:官方总是帮助你更好地解决问题!


你可以看这里。我想这是你的问题。

在KNOX容器内是否可以使用蓝牙、低功耗蓝牙和NFC ?

KNOX 2.4+ - KNOX容器内支持蓝牙、低功耗蓝牙(GATT)和NFC。

KNOX 2.3或以下 -在KNOX容器内不支持蓝牙,蓝牙GATT和NFC。如果设备连接到个人空间的外设(例如耳机),即使用户进入KNOX容器,蓝牙也会保持连接。 KNOX容器内的应用程序无法启动蓝牙连接

我从未有过这方面的实际经验,但我希望这对您有所帮助。

尝试将以下内容添加到您的清单

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

从SDK 23开始,如果需要,您需要检查蓝牙的权限。

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

从KNOX Premium v1.1开始,三星不再需要签署第三方应用程序(APK)文件,以便它们可以在KNOX容器中运行。相反,在应用程序成功激活其ELM和KLM许可后,在运行时授予适当的权限。有关更多信息,请参阅

最新更新