2015-11-04 75 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文件中? –