如果您在 android M 上进行测试,则必须请求用户在运行时读取联系人的权限,如下所示:
private void accessContacts(){
if (!mayRequestContacts()) {
return;
}
// This Build is < 6 , you can Access contacts here.
}
您请求这样的许可:
private boolean mayRequestContacts() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return true;
}
if (checkSelfPermission(READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
return true;
}
if (shouldShowRequestPermissionRationale(READ_CONTACTS)) {
Snackbar.make(mEmailView, R.string.permission_rationale, Snackbar.LENGTH_INDEFINITE)
.setAction(android.R.string.ok, new View.OnClickListener() {
@Override
@TargetApi(Build.VERSION_CODES.M)
public void onClick(View v) {
requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
}
});
} else {
requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
}
return false;
}
然后覆盖onRequestPermissionsResult
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == REQUEST_READ_CONTACTS) {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted , Access contacts here or do whatever you need.
}
}
}
将其添加到您的导入中:
import static android.Manifest.permission.READ_CONTACTS;
并定义一个整数作为 Id 来标识 READ_CONTACTS 权限请求。
private static final int REQUEST_READ_CONTACTS = 0;
希望这有帮助。