我正在尝试访问Android的联系人。但是,当我尝试运行代码时,它表示它需要“读取联系人”权限。好吧,我已经添加了,当我尝试验证我的清单文件时,它显示了一些错误。这是我的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="henrique1.birthdaynotifier" >
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name="henrique1.birthdaynotifier.MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
这些是我在尝试验证时遇到的错误:
错误:(4,43)cvc-elt.1:找不到元素'manifest'的声明。
错误:(1,56)s4s-elt-schema-ns:元素“x”的名称空间必须来自模式命名空间“http://www.w3.org/2001/XMLSchema”。
错误:(1,56)s4s-elt-invalid:元素'x'不是架构文档中的有效元素。
错误:(1,56)schema_reference.4:无法读取架构文档'null',因为1)找不到文档; 2)文件无法阅读; 3)文档的根元素不是。
我真的很感激一些帮助:)
提前致谢, Henrique的。
答案 0 :(得分:0)
看起来你在Marshmallow(API 23)上运行你的应用程序,你需要在运行时询问用户权限,而不是在Manifest中声明它。
您可以使用它来询问权限:
private void askForReadContactsPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(KamelioLoginActivity.this,
Manifest.permission.READ_CONTACTS)) {
Snackbar.make(loginMainContainer, "We need your permission to read your contacts information",
Snackbar.LENGTH_INDEFINITE)
.setAction(android.R.string.ok, new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityCompat.requestPermissions(MyActivity.this,
new String[]{Manifest.permission.READ_CONTACTS},
PERMISSION_REQUEST_READ_CONTACTS);
}
})
.show();
} else {
ActivityCompat.requestPermissions(MyActivity.this,
new String[]{Manifest.permission.READ_CONTACTS},
PERMISSION_REQUEST_READ_CONTACTS);
}
}
并覆盖Activity中的onRequestPermissionsResult并在那里获得结果
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_READ_CONTACTS) {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted, read the contacts
} else {
// Permission not granted, show alert or snack bar
}
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}