我希望通过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
是否有类似功能我不知道?
答案 0 :(得分:11)
您可以在没有权限的情况下检索联系信息,就像您在问题中所说的那样。
在简历中,您创建了一个选择联系人的意图,这会为您提供一个URI(并且在时间上也授予您阅读权限),然后使用URI查询以使用Contact Provider API检索数据
您可以在Intents guide中了解更多相关信息。
例如(来自指南):
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
...
}
}
}
答案 1 :(得分:1)
我希望没有这样的功能。 您将“无权限呼叫”与“无权限读取联系人”进行比较的方式将是我认为用户必须每手输入联系人数据。
应用程序必须请求权限以保护用户的隐私,并有助于防止数据收集应用程序。
如果您的应用需要联系人列表,我认为您可以添加权限,用户将理解您需要它的原因。如果您不需要联系人,则不应尝试阅读联系人。
应用程序总是应该只提供真正需要的功能,仅此而已。 如果桌面程序将收集您在计算机上正在进行的操作的数据,您正在播放的游戏,您正在邮寄的人等,您将其称为特洛伊木马。
因此,只需阅读联系人,如果真的需要,那么用户就会给你许可。
android的permission.system主要有意义;)