10

我想通过Contacts Picker这样的方式阅读联系人:

Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
startActivityForResult(contact, CONTACT_PICK_CODE);

如果我得到结果,其中intent.getData()包含一个查找联系人,但我需要读取它uri的权限。READ_CONTACTS

我认为没有这个权限也可以接收联系人,类似于CALL权限:如果我想直接拨打电话,我需要它,但没有它我可以向手机应用程序发送一个号码,用户必须点击在通话按钮上。我不知道
是否有类似的功能?READ_CONTACTS

4

2 回答 2

15

您可以在没有权限的情况下检索联系信息,就像您在问题中所说的那样。

在简历中,您创建了一个选择联系人的意图,这为您提供了一个 URI(暂时还授予您读取它的权限),然后您使用该 URI 查询以使用Contact Provider API检索数据。

您可以在Intents 指南中阅读更多相关信息。

例如(来自指南):

static final int REQUEST_SELECT_PHONE_NUMBER = 1;

public void selectContact() {
    // Start an activity for the user to pick a phone number from contacts
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(CommonDataKinds.Phone.CONTENT_TYPE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK) {
        // Get the URI and query the content provider for the phone number
        Uri contactUri = data.getData();
        String[] projection = new String[]{CommonDataKinds.Phone.NUMBER};
        Cursor cursor = getContentResolver().query(contactUri, projection,
                null, null, null);
        // If the cursor returned is valid, get the phone number
        if (cursor != null && cursor.moveToFirst()) {
            int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER);
            String number = cursor.getString(numberIndex);
            // Do something with the phone number
            ...
        }
    }
}
于 2014-08-25T17:08:11.540 回答
1

我希望没有这样的功能。我认为您将“无权限呼叫”与“无权限读取联系人”进行比较的方式就像用户必须手动输入联系人数据一样。

应用程序必须请求权限以保护用户的隐私并有助于防止数据收集应用程序。

如果您的应用需要联系人列表,我认为您可以添加权限,用户会明白您为什么需要它。如果您不需要联系人,则不应尝试读取联系人。

一个应用程序总是应该只提供真正需要的功能,仅此而已。如果一个桌面程序会收集您在计算机上所做的事情、您正在玩什么游戏、您邮寄给谁等等的数据,那么您将称之为木马。

因此,如果确实需要,只需阅读联系人,然后用户将因此授予您权限。

android的permission.system大多是有意义的;)

于 2013-07-12T09:55:18.670 回答