Android READ_PHONE_STATE运行时权限要求进行电话的拨打和管理。
Android READ_PHONE_STATE运行时权限要求进行电话的拨打和管理。
在应用程序中,我想通过TelephonyManager.getDeviceId()
获取唯一的手机ID。为了使用这个功能,我需要获得READ_PHONE_STATE
权限。问题是在Android 6上的运行时权限。在运行时权限弹出对话框中,它要求授予权限\"拨打和管理电话\",这可能会让用户担心使用应用。有什么办法吗?还是我可以获得其他设备的唯一标识符而不使用这么大的权限?\n
TelephonyManager TM = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String deviceId = TM.getDeviceId();
在我的应用中,我使用这个作为设备的唯一标识符,并且不需要任何运行时权限。
String android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID);
或者你可以使用这个方法:
String uuid = UUID.randomUUID().toString();
这是一个有信息量的问题,但是核心问题还没有被回答。为什么使用`READ_PHONE_STATE`会导致一个对话框显示"To make and manage phone calls"?
因为使用`READ_PHONE_STATE`权限,你可以处理呼入和呼出电话以及其他许多功能,所以它显示为"make and manage phone calls"。但问题是如何在不使用`READ_PHONE_STATE`权限的情况下获取设备的唯一标识符。他询问是否有其他的方法。
这种方法用户可以删除`android_id`并生成一个新的标识符。然后他可以滥用这个标识符来进行促销码的滥用。唯一一个不能被删除的标识符是Rafael使用的方法。但是为了使用这个方法,他需要相应的权限。问题是Android显示的对话框是错误的。当然人们会拒绝这个权限,因为他们担心会被打电话。所以这不是一个解决方法,而是使滥用成为可能的方法。