2015-11-04 51 views
0

我试图访问android的联系人。但是当我尝试运行代码时,它说它需要读取联系人权限。好吧,我已经添加了,当我尝试验证我的清单文件时,它显示了一些错误。这是我的清单文件: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:找不到元素“清单的声明”。 (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)文档的根元素不是。

我真的很感激这里一些帮助:)

在此先感谢, 恩里克。

+0

正在运行什么Android版本?棉花糖? –

+0

是最新的一个吧? –

+0

这是你的完整清单文件吗? – Melvin

回答

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

和覆盖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); 
     } 
    } 
+0

对不起,但我不能让它工作。我真的很陌生,所以请耐心等待。它不认识很多东西,比如Snackbar(class?)。所以我应该把这段代码放入MainActivity java文件中? –