在我的应用的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工具来锁定我的应用程序的蓝牙访问权限?这可能是异常的原因吗?
或者问题可能是什么原因?
答案 0 :(得分:2)
自it's bad practice to use catch(Exception e)
以来,请使用
} catch(SecurityException e){
以防止崩溃。
(现在作为答案,而不是评论。)