Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 调用BluetoothAdapter.getDefaultAdapter时出现SecurityException_Android_Bluetooth_Securityexception - Fatal编程技术网

Android 调用BluetoothAdapter.getDefaultAdapter时出现SecurityException

Android 调用BluetoothAdapter.getDefaultAdapter时出现SecurityException,android,bluetooth,securityexception,Android,Bluetooth,Securityexception,在我的应用程序的onCreate()中,我调用BluetoothAdapter.getAddress()。运行此应用程序的数百台设备中的一台产生java.lang.SecurityException: java.lang.RuntimeException:无法启动活动 ComponentInfo{xx.yyy.myapp/xx.yyy.myapp.RecActivity}: java.lang.SecurityException:需要蓝牙管理员权限:两者都不需要 用户10095或当前进程具有an

在我的应用程序的
onCreate()
中,我调用
BluetoothAdapter.getAddress()
。运行此应用程序的数百台设备中的一台产生
java.lang.SecurityException

java.lang.RuntimeException:无法启动活动 ComponentInfo{xx.yyy.myapp/xx.yyy.myapp.RecActivity}: java.lang.SecurityException:需要蓝牙管理员权限:两者都不需要 用户10095或当前进程具有android.permission.BLUETOOTH\u ADMIN。 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 在android.app.ActivityThread.access$600(ActivityThread.java:141) android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 位于android.os.Handler.dispatchMessage(Handler.java:99) Looper.loop(Looper.java:137)位于 android.app.ActivityThread.main(ActivityThread.java:5039)位于 java.lang.reflect.Method.Invokenactive(本机方法)位于 java.lang.reflect.Method.invoke(Method.java:511)位于 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) dalvik.system.NativeStart.main(本机方法)由以下原因引起: java.lang.SecurityException:需要蓝牙管理员权限:两者都不需要 用户10095或当前进程具有android.permission.BLUETOOTH\u ADMIN。 在android.os.Parcel.readException(Parcel.java:1425)中 readException(Parcel.java:1379)位于 android.bluetooth.IBluetoothManager$Stub$Proxy.getAddress(IBluetoothManager.java:295) 在 bluetooth.BluetoothAdapter.getAddress(BluetoothAdapter.java:576) 在xx.yyy.myapp.RecActivity.onCreate(未知源)处 android.app.Activity.performCreate(Activity.java:5104)位于 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) ... 还有11个

由于我无法在该设备上进行调试,我想问一下以下解决方案是否可行,或者是否有更好的方法来处理该问题(这是小于JELLY_BEAN_MR2的分支)

另外,我想知道该设备上的Android版本是否有bug,因为在我看来,
getAddress()
in不需要
Android.permission.BLUETOOTH\u ADMIN

或者,使用此设备的用户是否有可能使用特定的根工具从我的应用程序锁定蓝牙访问?这可能是例外的原因

或者问题的原因是什么?

因为,使用

为了防止撞车


(现在作为答案而不是评论。)

看起来他们很可能有根工具。权限锁定工具正变得越来越流行,并包含在许多自定义ROM中。您知道我的解决方案是否能够捕获SecurityException并避免RuntimeException,从而使应用程序不会崩溃,而是继续运行吗?这里,
ActivityThread
仅当您未捕获
SecurityException
时,才会单独抛出
RuntimeException
,因此只需捕获(SecurityException e)就足够了。谢谢。据我判断,这是我所寻求答案的重要部分!
BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter();
try {
    macAddress = ( bta != null ) ? bta.getAddress() : "";
} catch ( Exception e ) {
    macAddress = "";
}
} catch(SecurityException e){