调用BluetoothAdapter.getDefaultAdapter时出现SecurityException

时间:2015-06-30 12:40:33

标签: android bluetooth securityexception

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

  

java.lang.RuntimeException:无法启动活动   ComponentInfo {xx.yyy.myapp / xx.yyy.myapp.RecActivity}:   java.lang.SecurityException:需要BLUETOOTH ADMIN权限:都不是   用户10095和当前进程都有android.permission.BLUETOOTH_ADMIN。   在   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)   在   android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)   在android.app.ActivityThread.access $ 600(ActivityThread.java:141)at   android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1234)   在android.os.Handler.dispatchMessage(Handler.java:99)at   android.os.Looper.loop(Looper.java:137)at   android.app.ActivityThread.main(ActivityThread.java:5039)at   java.lang.reflect.Method.invokeNative(Native Method)at   java.lang.reflect.Method.invoke(Method.java:511)at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)   在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)at   dalvik.system.NativeStart.main(Native方法)引起:   java.lang.SecurityException:需要BLUETOOTH ADMIN权限:都不是   用户10095和当前进程都有android.permission.BLUETOOTH_ADMIN。   在android.os.Parcel.readException(Parcel.java:1425)at   android.os.Parcel.readException(Parcel.java:1379)at   android.bluetooth.IBluetoothManager $存根$ Proxy.getAddress(IBluetoothManager.java:295)   在   android.bluetooth.BluetoothAdapter.getAddress(BluetoothAdapter.java:576)   在xx.yyy.myapp.RecActivity.onCreate(未知来源)at   android.app.Activity.performCreate(Activity.java:5104)at   android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)   在   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)   ......还有11个

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

BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter();
try {
    macAddress = ( bta != null ) ? bta.getAddress() : "";
} catch ( Exception e ) {
    macAddress = "";
}

另外,我想知道该设备上的Android版本是否有错误,因为我认为BluetoothAdapter.java中的getAddress()不需要android.permission.BLUETOOTH_ADMIN

或者使用此设备的用户是否有可能使用特定的root工具来锁定我的应用程序的蓝牙访问权限?这可能是异常的原因吗?

或者问题可能是什么原因?

1 个答案:

答案 0 :(得分:2)

it's bad practice to use catch(Exception e)以来,请使用

} catch(SecurityException e){

以防止崩溃。

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