Android READ_PHONE_STATE运行时权限要求拨打和管理电话

Android READ_PHONE_STATE runtime permission asks to make and manage phone calls

在应用程序中,我希望通过TelephonyManager.getDeviceId()获取唯一的手机ID。 要使用它,我需要此权限READ_PHONE_STATE。 问题在于Android 6的运行时权限。在运行时权限弹出对话框中,它要求授予"制作和管理电话"权限,这可能会吓到用户使用应用程序。 可以做些什么? 或者,如果不使用如此大的权限,我可以获得设备的任何其他唯一标识符

1
2
3
TelephonyManager TM = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

String deviceId = TM.getDeviceId();


我在我的应用程序中使用它作为唯一的设备标识符,我不需要任何运行时权限。

1
2
String android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(),
                Settings.Secure.ANDROID_ID);

或者您可以使用它

1
 String uuid = UUID.randomUUID().toString();


要求来自某个权限组的权限会打开一个对话框,该对话框将授予所述组的每个权限(前提是您还在清单中请求了这些权限)。

示例:在清单中询问READ_PHONE_STATECALL_PHONE。 在运行时仅请求READ_PHONE_STATE。 获得权限对话框。 验证您是否已被授予两种权限。

危险权限和权限组列表:https://developer.android.com/guide/topics/permissions/requesting.html

自Android 6以来,此行为未发生变化,但将来可能会更改。