如何在不使用READ_CONTACTS权限的情况下查找联系人的地址?



我需要从联系人列表中获取某个联系人的地址。我使用ACTION_PICK意图来做到这一点:

            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setType(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_TYPE);                
            startActivityForResult(intent, ActivitiesRequestCodes.REQUEST_CODE_PICK_CONTACT);

当在onActivityResult中收到结果时,我解析结果以获得联系人的地址:

           Cursor cursor = getContentResolver().query(contactDataUri, null,null, null, null);
           StringBuilder address = new StringBuilder();
           if (cursor != null && cursor.moveToFirst()) {
                 // read street
                int streetIndex =     cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET);
                String street = cursor.getString(streetIndex);
                 // read city etc .....
          }

此代码是基于以下内容编写的:传递到onActivityResult()回调的结果Intent包含指向所选联系人数据的内容:URI。即使您的应用程序不包含read_CONTACTS权限,响应也会授予您的应用读取该联系人数据的临时权限(http://developer.android.com/guide/components/intents-common.html#Contacts)

三星设备上的一切都很完美,但令人惊讶!在Htc设备上,解析代码崩溃,出现安全异常:

由以下原因引起:java.lang.SecurityException:拒绝权限:正在读取com.android.providers.contacs.HtcContactsProvider2-uricontent://com.android.contacts/data/1478从pid=11661,uid=10197需要android.permission.READ_CONCATS或grantUriPermission()

下一步该怎么办?我不能使用READ_CONTACTS权限。任何想法都将不胜感激。

感谢

从联系人选择器中,您将在不添加权限的情况下获得联系人详细信息,请尝试此代码

 Cursor cursor = null;
    try {
        // getData() method will have the Content Uri of the selected contact
        Uri uri = data.getData();
        //Query the content uri
        String[] projection = new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME};
        cursor = context.getContentResolver().query(uri, projection, null, null, null);
        cursor.moveToFirst();
    } catch (Exception e) {
    }

相关内容

  • 没有找到相关文章

最新更新