2011-11-12 11 views
14

私はユーザーの連絡先を参照する簡単なアプリを開発中です。permission.READ_CONTACTSが機能していないようです

java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.HtcContactsProvider2 uri content://com.android.contacts/contacts from pid=27455, uid=10171 requires android.permission.READ_CONTACTS 

は私のマニフェストファイルは、次のようになります:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.android.helloMaps" 
    android:versionCode="1" 
    android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="8" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.READ_CONTACTS" /> 
    <application android:icon="@drawable/icon" 
     android:label="@string/app_name" 
     android:debuggable="true"> 
     <uses-library android:name="com.google.android.maps" /> 
     <activity android:name=".MapsActivity" 
        android:label="@string/app_name" 
        android:theme="@android:style/Theme.NoTitleBar">    
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 

     </activity> 
    </application> 
</manifest> 

私はで私の連絡先を見しようとしています:

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 

Iをしました残念ながら私は、次のエラーを取得しておきます<uses-permission android:name="android.permission.READ_CONTACTS" />またはandroid:permission="android.permission.READ_CONTACTS"<application>または<activity>に追加しようとしましたが、どちらも機能しませんでした。

私はオプションが不足しています、誰かが私がここで行方不明を知っていますか?

+1

チェック連絡先の電話番号/名前を照会することができます! – Steve

答えて

12

<uses-permission>は、<manifest>要素に含める必要があります。 Structure of the Manifest Fileを参照してください。だから<application>または<activity>に入れようとするとうまくいかないでしょう。絶望の移動:<application>

<uses-sdk android:minSdkVersion="8" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
また

あなたは他の許可なしにテストすることができれば、それらを削除する前に<uses-sdk>を移動しよう。

EDIT:これはあなたのマニフェストファイル内の一番上の行であるかどうかをチェックしてくださいすることができ:

<?xml version="1.0" encoding="utf-8"?> 
+0

お返事いただきありがとうございます。私は最初に ''をすべて移動しました。次に、READ_CONTACTSを除くすべての権限を削除しましたが、残念ながらそのいずれも機能しませんでした – Danielvd

+0

こんにちは、私は私の答えを編集しました。私はあなたがあなたのマニフェストのすべてを投稿したのか、あるいは一部しか投稿していないのか分かりません。いずれにしても、許可の宣言は正しい。マニフェストで「検証」を実行できますか? – hovanessyan

+0

私の悪い、私は私の全体的なマニフェストを投稿するつもりだった、明らかに私は最初の行を忘れました。私は自分の質問を編集し、最初の行を追加しました。 – Danielvd

0

を私は今日、この問題に遭遇し、上記の修正のどれも私のために働いていません。

私のEclipseで何が問題になったのか。 manifest.xmlに書いたものとPermissionsのものは同じではありませんでした。私はREAD_CONTACTSの許可を私のmanifest.xmlに持っていましたが、READ_PROFILEは私の許可のタブの下にあります。

私はこれが古いスレッドであることを知っていますが、もし誰かが同じ問題を抱えていれば、私は彼らがこの問題を抱えて遭遇することを願っています。

ありがとうございます!

3

私は同じ問題を抱えていて、READ_CONTACTSの許可とともにWRITE_EXTERNAL_STORAGEの権限を追加するまで、私が読んだ解決策はどれも解決できませんでした。

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

なぜあなたはそれが必要なのでしょうか? – AdamMc331

6

私は許可がSDK 23で重要なヒント始まるどのように処理されるかについてthis articleを読むまで、私はこの上で完全に立ち往生した:

If the application's targetSdkVersion is set to less than 23. It will be assumed that application is not tested with new permission system yet and will switch to the same old behavior: user has to accept every single permission at install time and they will be all granted once installed !

を、私は私のgradle.buildファイルを開いて、targetSdkVersion 22targetSdkVersion 23を変更今はすべてがうまくいく!私は最終的に新しい権限システムを構築し、targetSdkVersion 23に戻ってきます。これはおそらくもっと正しい答えでしょう。これは一時的なショートカットです。

+1

これは私のために、ありがとう! (Androidによってスローされた例外のエラーメッセージはそれほど有用ではありませんでした。)私たちは、実行時のアクセス許可を正しく実装することを選択しました。そのためには[公式ドキュメント](https://developer.android.com/training/permissions/requesting。 html)が最終的に最も有用なリソースでした。 – Jonik

3

は方法

ActivityCompat.requestPermissions(この、新しいString [] {Manifest.permissionを作成し、あなたの上でこれを試してみてください。READ_CONTACTS}、1);

1

上記のうちどれも助けられませんでした。解決策は非常に簡単です。 実行時のアクセス権の要求が必要です。

あなたのマニフェストに許可を与えてもしなくても、オンザフライでその許可を要求する必要があります。 if(getApplicationContext().checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS}, resultValue);

はその後、承認後、あなたはあなたのAndroid携帯電話の設定に権限を許可している場合など