ユーザーの連絡先を閲覧するシンプルなアプリを開発しています。残念ながら、次のエラーが発生し続けます。
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>
、しかしどちらも機能しませんでした。
オプションが不足しています。ここで不足しているものを誰かが知っていますか?
<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"?>
SDK 23以降、アクセス許可がどのように処理されるかについて この記事 を読むまで、私は完全にこれにこだわっていました。重要なヒント:
アプリケーションのtargetSdkVersionが23未満に設定されている場合。アプリケーションは新しい権限システムでまだテストされておらず、同じ古い動作に切り替わると想定されます。ユーザーはインストール時にすべての権限を受け入れる必要があり、すべての権限が付与されますインストールしたら!
gradle.build
ファイルを開いてtargetSdkVersion 23
をtargetSdkVersion 22
に変更したところ、すべて正常に動作しました。私は最終的に、新しい権限システムを構築してtargetSdkVersion 23
に切り替える時間を見つけます。これがおそらくより正しい答えです。これは一時的なショートカットです。
上記のどれも役に立たなかった。解決策は非常に簡単です。ランタイム許可リクエストが必要になります。
マニフェストに権限を設定するかどうかに関係なく、オンザフライでユーザーにその権限を要求する必要があります。 if( getApplicationContext().checkSelfPermission( Manifest.permission.READ_CONTACTS ) != PackageManager.PERMISSION_GRANTED ) ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS}, resultValue);
その後、承認後にのみ、連絡先の電話番号/名前などを照会できるようになります。
On createメソッドでこれを試してください
ActivityCompat.requestPermissions(this、new String [] {Manifest.permission.READ_CONTACTS}、1);
私は同じ問題を抱えていましたが、WRITE_EXTERNAL_STORAGE
許可とREAD_CONTACTS
許可。
<uses-permission Android:name="Android.permission.READ_CONTACTS" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
今日、この問題に遭遇しましたが、上記の修正はどれもうまくいきませんでした。
結局のところ、問題は私のEclipseに関係していました。私が書いたものmanifest.xml
とPermissions
タブの内容は同じではありませんでした。 READ_CONTACTS
パーミッションmanifest.xml
、 だが READ_PROFILE
は私の許可のタブの下の場所にありました。
私はこれが古いスレッドであることを知っていますが、うまくいけば、誰かが同じ問題を抱えていれば、彼らはこれに遭遇するでしょう。
ありがとう!