Android清单文件出错。似乎无法加载权限

时间:2015-11-04 02:00:54

标签: android xml xsd

我正在尝试访问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的。

1 个答案:

答案 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);
        }
    }