Android 未经READ_contacts权限从联系人列表中获取所选电话号码

Android 未经READ_contacts权限从联系人列表中获取所选电话号码,android,android-intent,android-contacts,android-permissions,Android,Android Intent,Android Contacts,Android Permissions,在我的应用程序中,我想让用户可以通过手动键入电话号码或从联系人列表中选择电话号码来用电话号码填写文本表单。我不明白的一点是,如果用户自己选择联系人,为什么我要设置READ\u CONTACTS权限。我使用的代码如下: 要启动联系人活动,请执行以下操作: Intent pickContactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTEN

在我的应用程序中,我想让用户可以通过手动键入电话号码或从联系人列表中选择电话号码来用电话号码填写文本表单。我不明白的一点是,如果用户自己选择联系人,为什么我要设置
READ\u CONTACTS
权限。我使用的代码如下:

  • 要启动联系人活动,请执行以下操作:

    Intent pickContactIntent = new Intent(Intent.ACTION_PICK,
                                     ContactsContract.Contacts.CONTENT_URI);
    pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST_CODE);
    
  • 要处理来自ActivityResult的
    Intent
    数据,请执行以下操作:

    Uri uri = data.getData();
    if (uri != null) {
      Cursor c = null;
      try {
        c = getContentResolver()
            .query(
                uri,
                new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER,
                    ContactsContract.CommonDataKinds.Phone.TYPE }, null, null,
                null);
    
        if (c != null && c.moveToFirst()) {
          String number = c.getString(0);
          int type = c.getInt(1);
          showSelectedNumber(type, number);
        }
      } finally {
        if (c != null) {
          c.close();
        }
      }
    }
    
  • 据我所知,
    getContentResolver().query()
    需要
    READ\u CONTACTS
    权限才能获取电话号码


    我的问题:是否有可能在没有
    READ\u CONTACTS
    的情况下处理活动结果中出现的意图?

    如果不在清单文件中授予
    READ\u CONTACTS
    权限,您就无法访问Android CONTACTS数据库

    Android移动操作系统使用权限系统来帮助确保应用程序正常运行。该系统允许应用程序请求访问设备上可以使用电源、访问敏感数据和收费的功能


    在清单文件中未授予
    READ\u contacts
    权限的情况下,您无法访问Android contacts数据库

    Android移动操作系统使用权限系统来帮助确保应用程序正常运行。该系统允许应用程序请求访问设备上可以使用电源、访问敏感数据和收费的功能


    在清单文件中未授予
    READ\u contacts
    权限的情况下,您无法访问Android contacts数据库

    Android移动操作系统使用权限系统来帮助确保应用程序正常运行。该系统允许应用程序请求访问设备上可以使用电源、访问敏感数据和收费的功能


    在清单文件中未授予
    READ\u contacts
    权限的情况下,您无法访问Android contacts数据库

    Android移动操作系统使用权限系统来帮助确保应用程序正常运行。该系统允许应用程序请求访问设备上可以使用电源、访问敏感数据和收费的功能


    您应该在清单文件中写入权限,然后您只能从文件中读取联系人

    您应该在清单文件中写入权限,然后您只能从文件中读取联系人

    您应该在清单文件中写入权限,然后您只能从文件中读取联系人

    您应该在清单文件中写入权限,然后您只能从文件中读取联系人

    实际上,你不需要阅读联系人

    注意:在Android 2.3(API级别9)之前,在联系人提供商上执行查询(如上图所示)需要您的应用程序声明READ_Contacts权限(请参阅安全和权限)。但是,从Android 2.3开始,联系人/联系人应用程序在返回结果时会授予您的应用程序从联系人提供商处读取的临时权限。临时权限仅适用于请求的特定联系人,因此除非您声明了READ\u CONTACTS权限,否则您无法查询除由intent的Uri指定的联系人之外的联系人。


    来源:

    实际上你不需要阅读联系人

    注意:在Android 2.3(API级别9)之前,在联系人提供商上执行查询(如上图所示)需要您的应用程序声明READ_Contacts权限(请参阅安全和权限)。但是,从Android 2.3开始,联系人/联系人应用程序在返回结果时会授予您的应用程序从联系人提供商处读取的临时权限。临时权限仅适用于请求的特定联系人,因此除非您声明了READ\u CONTACTS权限,否则您无法查询除由intent的Uri指定的联系人之外的联系人。


    来源:

    实际上你不需要阅读联系人

    注意:在Android 2.3(API级别9)之前,在联系人提供商上执行查询(如上图所示)需要您的应用程序声明READ_Contacts权限(请参阅安全和权限)。但是,从Android 2.3开始,联系人/联系人应用程序在返回结果时会授予您的应用程序从联系人提供商处读取的临时权限。临时权限仅适用于请求的特定联系人,因此除非您声明了READ\u CONTACTS权限,否则您无法查询除由intent的Uri指定的联系人之外的联系人。


    来源:

    实际上你不需要阅读联系人

    注意:在Android 2.3(API级别9)之前,在联系人提供商上执行查询(如上图所示)需要您的应用程序声明READ_Contacts权限(请参阅安全和权限)。但是,从Android 2.3开始,联系人/联系人应用程序在返回结果时会授予您的应用程序从联系人提供商处读取的临时权限。临时权限仅适用于请求的特定联系人,因此除非您声明了READ\u CONTACTS权限,否则您无法查询除由intent的Uri指定的联系人之外的联系人。


    来源:

    实际上,你不应该需要阅读联系人。 @Tony Chu是对的,文件上说:

    注意:在Android 2.3(API级别9)之前,在联系人提供商上执行查询(如上图所示)需要应用程序声明READ_Contacts权限(请参阅安全和权限)。但是,从Android 2.3开始,联系人/联系人应用程序在返回结果时会授予您的应用程序从联系人提供商处读取的临时权限。临时权限仅适用于请求的特定联系人,因此,除非您声明了READ_CONTACTS权限,否则您无法查询由intent的Uri指定的联系人以外的联系人。()

    然而,我注意到有些手机可能