java.lang.SecurityException essayant de lire à partir d'Android Contacts URI
Je suis en train de lire les noms de Contact, téléphone #'s, et e-mails à partir de la ContactsContract
URI, et j'en suis SecurityException
lorsque j'essaie d'exécuter le programme. J'ai mis de l'autorisation dans le AndroidManifest.xml
fichier:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="edu.smumn.cs394"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
**<uses-permission android:name="android.pemission.READ_CONTACTS"/>**
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".ReadPhoneNumbers"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>`
Ce qui suit est le code de l'application:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_list);
ContentResolver resolver = getContentResolver();
Cursor c = resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
//[...] Work through data here`
J'obtiens une exception de sécurité sur la dernière ligne (resolver.query()
):
`03-08 07:41:40.812: ERROR/AndroidRuntime(416): FATAL EXCEPTION: main
03-08 07:41:40.812: ERROR/AndroidRuntime(416): java.lang.RuntimeException: Unable to start activity ComponentInfo{edu.smumn.cs394/edu.smumn.cs394.ReadPhoneNumbers}: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/contacts from pid=416, uid=10037 requires android.permission.READ_CONTACTS
[...]
03-08 07:41:40.812: ERROR/AndroidRuntime(416): Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/contacts from pid=416, uid=10037 requires android.permission.READ_CONTACTS
[...]
03-08 07:41:40.812: ERROR/AndroidRuntime(416): at edu.smumn.cs394.ReadPhoneNumbers.onCreate(ReadPhoneNumbers.java:30)
[...]`
Quelque chose doit m'échapper, mais je ne peux pas comprendre ce qu'.
source d'informationauteur Steven
Vous devez vous connecter pour publier un commentaire.
Assurez-vous que vous l'ajouter à l'extérieur de la balise application. Tout en développant une plate-forme cible des 2.3.3 à l'aide d'Eclipse sur Ubuntu, j'ai eu l'autorisation des échecs dans le fichier journal indique j'ai besoin de cette ligne exacte tout en travaillant sur quelque chose de semblable. Il n'était pas jusqu'à ce que j'ai déménagé l' *uses-permission...READ_CONTACTS* ligne à l'extérieur de la balise application que les choses fonctionnaient.
Demander des Autorisations au Moment de l'Exécution
Début dans Android 6.0 (API level 23), les utilisateurs d'accorder des autorisations pour les applications, tandis que l'application est en cours d'exécution, et non pas lors de l'installation de l'application.
Si l'autorisation vous devez ajouter n'est pas dans la liste sous la normale autorisations, vous aurez besoin pour faire face à "Exécution des Autorisations". D'exécution des autorisations sont les autorisations sont demandées car ils sont nécessaires, tandis que l'application est en cours d'exécution. Ces autorisations affichera une boîte de dialogue à l'utilisateur, semblable à la suivante:
La première étape lors de l'ajout d'un "Runtime Permission" pour l'ajouter à la AndroidManifest:
Ensuite, vous aurez besoin pour initier la demande d'autorisation et de gérer le résultat. Le code suivant montre comment faire cela dans le contexte d'une Activité, mais cela est également possible à partir de l'intérieur d'un Fragment.
Bonjour Steven le journal de débogage de trace indique que vous devez
... nécessite android.la permission.READ_CONTACTS
si juste essayer quelque chose en modifiant le Manifest.xml comme l'ajout d'une autre autorisation, voyons si elle n'est pas correctement lues.
et vérifier cette ligne sans **
dan
avec l'api 23, l'autorisation
<uses-permission android:name="android.pemission.READ_CONTACTS"/>
dont le travail, changer de niveau de l'api dans l'émulateur pour api 22(lollipop) ou moinsSi l'appareil est en cours d'exécution Android 6.0 ou supérieur, et de votre application cible SDK est 23 ou plus: cette application liste les autorisations dans le manifeste, et il doit demander à chaque autorisation dangereuse il a besoin, tandis que l'application est en cours d'exécution. L'utilisateur peut accorder ou de refuser chaque autorisation, et l'application peut continuer à fonctionner avec des capacités limitées, même si l'utilisateur refuse une demande d'autorisation.
EXEMPLE:
http://developer.android.com/training/permissions/requesting.html