为什么READ_PHONE_STATE权限要求“拨打和管理电话”?

时间:2019-06-11 05:57:07

标签: android permissions

要通过此代码获取IMEI i:

TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
       if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 1);
        } else { 
                iMEI = tm.getDeviceId(); 
        }

但是当我的应用程序正在运行时,会出现以下对话框:

this answer

程序要求授予权限“拨打和管理电话”,这可能使用户害怕使用应用程序。

  

现在我的问题是:

     

为什么READ_PHONE_STATE权限询问“拨打和管理电话”?虽然我还没有拨打电话和管理电话   应用程序。

2 个答案:

答案 0 :(得分:5)

READ_PHONE_STATE权限被列为“危险”权限,并提供对已读电话状态的访问权限。它在Phone权限组下。如果请求危险许可,系统将显示与其组相关的对话框。就您而言,Phone。这就是原因-用户被要求获得“拨打和管理电话”权限。这是询问权限的方式- https://developer.android.com/training/permissions/requesting

要使其更清楚,请参见 https://developer.android.com/guide/topics/permissions/overview

它说-

  

如果设备运行的是Android 6.0(API级别23),并且应用的   targetSdkVersion为23或更高,以下系统行为   当您的应用请求危险许可时适用:

     
      
  • 如果该应用当前在权限组中没有任何权限,则系统会向用户显示权限请求对话框
      描述应用程序要访问的权限组。
      对话框未描述该组中的特定权限。
      例如,如果某个应用请求READ_CONTACTS权限,则
      系统对话框仅显示该应用需要访问设备的
      联系人。如果用户批准,则系统仅向该应用提供
      它请求的权限。

  •   
  • 如果已在同一权限组中为该应用程序授予了另一个危险权限,则系统会立即授予该
      许可,无需与用户进行任何互动。例如,如果
      应用先前已请求并获得READ_CONTACTS
      权限,然后请求系统WRITE_CONTACTS
      立即授予该权限而不显示权限
      对话框。

  •   

有很多更好的方法来获取唯一标识符。例如-

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

答案 1 :(得分:2)

  

为什么READ_PHONE_STATE权限要求“拨打和管理电话”?   虽然我还没有在应用程序中拨打电话和管理电话。

棉花糖之后,我们需要明确调用危险许可下的许可。

READ_PHONE_STATE权限组下,称为Phone