web-dev-qa-db-ja.com

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

追加しようとしました<uses-permission Android:name="Android.permission.READ_CONTACTS" />またはAndroid:permission="Android.permission.READ_CONTACTS"<application>または<activity>、しかしどちらも機能しませんでした。

オプションが不足しています。ここで不足しているものを誰かが知っていますか?

18
Danielvd

<uses-permission><manifest>要素に含める必要があります。 マニフェストファイルの構造 を参照してください。したがって、それを<application>または<activity>に入れても機能しません。必死の動き:<uses-sdk>の前に<application>を動かそう

<uses-sdk Android:minSdkVersion="8" />
<uses-permission Android:name="Android.permission.READ_CONTACTS" />

また、他の権限なしでテストできる場合は、それらを削除します。

編集:これがマニフェストファイルのTOP行かどうかを確認してください:

<?xml version="1.0" encoding="utf-8"?>
17
hovanessyan

SDK 23以降、アクセス許可がどのように処理されるかについて この記事 を読むまで、私は完全にこれにこだわっていました。重要なヒント:

アプリケーションのtargetSdkVersionが23未満に設定されている場合。アプリケーションは新しい権限システムでまだテストされておらず、同じ古い動作に切り替わると想定されます。ユーザーはインストール時にすべての権限を受け入れる必要があり、すべての権限が付与されますインストールしたら!

gradle.buildファイルを開いてtargetSdkVersion 23targetSdkVersion 22に変更したところ、すべて正常に動作しました。私は最終的に、新しい権限システムを構築してtargetSdkVersion 23に切り替える時間を見つけます。これがおそらくより正しい答えです。これは一時的なショートカットです。

9
blythe83

上記のどれも役に立たなかった。解決策は非常に簡単です。ランタイム許可リクエストが必要になります。

マニフェストに権限を設定するかどうかに関係なく、オンザフライでユーザーにその権限を要求する必要があります。 if( getApplicationContext().checkSelfPermission( Manifest.permission.READ_CONTACTS ) != PackageManager.PERMISSION_GRANTED ) ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS}, resultValue);

その後、承認後にのみ、連絡先の電話番号/名前などを照会できるようになります。

4
Alon Kogan

On createメソッドでこれを試してください

ActivityCompat.requestPermissions(this、new String [] {Manifest.permission.READ_CONTACTS}、1);

4
TheChosenOne

私は同じ問題を抱えていましたが、WRITE_EXTERNAL_STORAGE許可とREAD_CONTACTS許可。

<uses-permission Android:name="Android.permission.READ_CONTACTS" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
3
user1091524

今日、この問題に遭遇しましたが、上記の修正はどれもうまくいきませんでした。

結局のところ、問題は私のEclipseに関係していました。私が書いたものmanifest.xmlPermissionsタブの内容は同じではありませんでした。 READ_CONTACTSパーミッションmanifest.xml、 だが READ_PROFILEは私の許可のタブの下の場所にありました。

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

ありがとう!

0
Justin Kibler