应用在Android M上因SecurityException崩溃 [英] App crashes with SecurityException on Android M

查看:111
本文介绍了应用在Android M上因SecurityException崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

昨天我设置了目标并将sdk编译为23 API级别。当我在带有预览Android M(MPA441)的Nexus 9上启动该应用程序时,该应用程序崩溃并显示以下 SecurityException

Yesterday I set upped target and compile sdk to 23 API level. When I launched the app on Nexus 9 with Preview Android M (MPA441) the app crashes with following SecurityException:

FATAL EXCEPTION: main
 Process: com.grouplogic.mobilecho, PID: 22554
 java.lang.RuntimeException: Unable to create application com.mypackage.MyApplication: java.lang.SecurityException: getDeviceId: Neither user 10098 nor current process has android.permission.READ_PHONE_STATE.
     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4710)
     at android.app.ActivityThread.-wrap1(ActivityThread.java)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
     at android.os.Handler.dispatchMessage(Handler.java:102)
     at android.os.Looper.loop(Looper.java:148)
     at android.app.ActivityThread.main(ActivityThread.java:5417)
     at java.lang.reflect.Method.invoke(Native Method)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
  Caused by: java.lang.SecurityException: getDeviceId: Neither user 10098 nor current process has android.permission.READ_PHONE_STATE.
     at android.os.Parcel.readException(Parcel.java:1599)
     at android.os.Parcel.readException(Parcel.java:1552)
     at com.android.internal.telephony.ITelephony$Stub$Proxy.getDeviceId(ITelephony.java:4175)
     at android.telephony.TelephonyManager.getDeviceId(TelephonyManager.java:706)
     at com.mypackage.utils.DeviceUtils.isRunOnEmulator(DeviceUtils.java:63)
     at com.mypackage.utils.DeviceUtils.getDeviceID(DeviceUtils.java:49)
     at com.mypackage.domain.service.SettingService.setupPreferences(SettingService.java:79)
     at com.mypackage.app.BaseApplication.createSingletons(BaseApplication.java:84)
     at com.mypackage.app.BaseApplication.onCreate(BaseApplication.java:66)
     at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013)
     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4707)
     at android.app.ActivityThread.-wrap1(ActivityThread.java) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5417) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

有人知道为什么我通过Android Studio安装应用程序时默认禁用新安装应用程序的权限吗?避免此崩溃的正确方法是什么,也许有一种方法可以检查启用或不启用目标权限,并且仅在启用后,应用程序才应使用某些特定的设备API(读取电话状态,联系人和其他权限)?在互联网上,我刚刚找到了提及与该问题相关的 1 ,但是我没有找到任何明确的解释:这是Android M中的错误还是开发人员无法理解如何以安全的方式使用权限!?另外,我已经阅读了此帖子,但是介绍了用户应进入设置并启用权限的方法对于应用来说看起来很奇怪,而且不友好。我想如果用户从Google Play安装应用程序,一切都会很好,因为他明确地申请了请求的权限,但是我需要确认。

Does somebody know why the permission is disabled by default for new installed app when I install app through Android Studio? What is the correct way to avoid this crash, maybe there is way to check enable or not target permission and only if it is enabled the app should use some specific device API (read phone state, contacts and other permissions)? In the Internet I've just found this mention related to this problem1, but there I didn't find any clear explanation: is it bug in Android M or developer cannot understand how to use permission in a safe manner!? Also I've read this post but approach when user should go to settings and enable permission for app looks strange and not user friendly. I guess if user installs app from the Google Play everything will be fine because he explicitly to apply requested permission, but I need to confirm it.

推荐答案

在这里您可以找到运行时如何请求权限。

https://developer.android.com/training/permissions/ requesting.html

Here you can find how-to request permissions at runtime.
https://developer.android.com/training/permissions/requesting.html

这篇关于应用在Android M上因SecurityException崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆