1

Quelques infos premier:PickContact nécessite android.permission.READ_CONTACTS ou grantUriPermission()

J'ai d'abord créé l'application à Cordoue: voir Cordova permissions requires android.permission.READ_CONTACTS, or grantUriPermission()

Maintenant, je créé l'application comme une application native Android Android Studio Builder, il a la même erreur.

J'utilise Android 6.0 (SDK 23)

Selon les docs, ContactPick n'a pas besoin d'autorisations: http://developer.android.com/guide/components/intents-common.html#Contacts

The result Intent delivered to your onActivityResult() callback contains the content: URI pointing to the selected contact. The response grants your app temporary permissions to read that contact using the Contacts Provider API even if your app does not include the READ_CONTACTS permission. 

(mais je l'ai déclaré il pas moins)

<?xml version="1.0" encoding="UTF-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="me.sapico.notify_arrival"> 
    <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="23" /> 
    <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS" /> 
    <uses-permission-sdk-23 android:name="android.permission.LOCATION_HARDWARE" /> 
    <uses-permission-sdk-23 android:name="android.permission.INTERNET" /> 
    <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     </activity> 
    </application> 
</manifest> 

Voici mon code (il utilise un clic sur ListView)

listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() 
{ 
    @Override 
    public void onItemClick(AdapterView<?> adapter, View v, int position, 
          long arg3) 
    { 
     Intent intent = new Intent(Intent.ACTION_PICK); 
     intent.setType(ContactsContract.Contacts.CONTENT_TYPE); 
     if (intent.resolveActivity(getPackageManager()) != null) { 
      startActivityForResult(intent, REQUEST_SELECT_CONTACT); 
     } 
    } 
}); 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    //super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) { 
     String phone = getNumberContacts(data); 
     String t = ""; 
     /* Uri contactUri = data.getData(); 
     String[] projection = {};//ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.CONTACT_ID}; 
     Cursor cursor = getContentResolver().query(contactUri, projection, 
       null, null, null); 
     // If the cursor returned is valid, get the phone number 
     if (cursor != null && cursor.moveToFirst()) { 
      int numberIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
      String number = cursor.getString(numberIndex); 
      // Do something with the phone number 
      //... 
     }*/ 
    } 
} 

Voici le stacktrace

11-05 01:47:17.008 26632-26688/me.sapico.notify_arrival E/Surface: getSlotFromBufferLocked: unknown buffer: 0xaefbd3e0 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime: FATAL EXCEPTION: main 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime: Process: me.sapico.notify_arrival, PID: 26632 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/258i49688c038aae982f.3789r2248-292F313F3943312F31533F4545/897 flg=0x1 }} to activity {me.sapico.notify_arrival/me.sapico.notify_arrival.MainActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/data/phones from pid=26632, uid=10149 requires android.permission.READ_CONTACTS, or grantUriPermission() 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.app.ActivityThread.deliverResults(ActivityThread.java:3699) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.app.ActivityThread.-wrap16(ActivityThread.java) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:148) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5417) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime: Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/data/phones from pid=26632, uid=10149 requires android.permission.READ_CONTACTS, or grantUriPermission() 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.os.Parcel.readException(Parcel.java:1599) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.content.ContentProviderProxy.query(ContentProviderNative.java:421) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.content.ContentResolver.query(ContentResolver.java:491) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.content.ContentResolver.query(ContentResolver.java:434) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at me.sapico.notify_arrival.MainActivity.getNumberContacts(MainActivity.java:200) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at me.sapico.notify_arrival.MainActivity.onActivityResult(MainActivity.java:175) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.app.Activity.dispatchActivityResult(Activity.java:6428) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.app.ActivityThread.deliverResults(ActivityThread.java:3695) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)  
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.app.ActivityThread.-wrap16(ActivityThread.java)  
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)  
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102)  
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:148)  
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5417)  
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method)  
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

J'ai eu de nombreuses variantes sur les autorisations/demander des informations de téléphone. Il échoue la plupart du temps quand j'essaie d'obtenir le numéro .. (j'ai réussi une fois à obtenir le nom d'utilisateur).

Des pensées? C'est aussi dans mon application Cordova (je pensais que c'était Cordova auparavant), mais maintenant il est également en Android natif. Je sais que Android 6.0 est récent, mais je ne trouve rien dans docs/stackoverflow.

+0

Votre problème réside dans 'getNumberContacts()', qui n'est pas dans votre code source indiqué dans votre question. – CommonsWare

+0

Non, c'est probablement à cause de http://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en et je vais enquêter demain :) – NicoJuicy

+0

Et il se bloque sur l'échec de livraison résultat ResultInfo, de sorte qu'il ne peut pas me donner les informations de contact pour une raison quelconque – NicoJuicy

Répondre

1

La réponse est quelque part entre les deux. AndroidManifest.xml a été déclaré correctement, mais mes paramètres de construction ont changé la version de targetdk à 23. Ce qui provoque le nouveau système d'autorisation (voir @http://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en)

J'ai modifié le fichier de construction gradle (après avoir vérifié mon AndroidManifest lors du déballage l'apk). Et ça marche maintenant!

+0

Cela m'a beaucoup aidé. – YehCheez

+0

Depuis combien de temps cherchez-vous? : p – NicoJuicy

+0

Quelques jours peut-être: P lol. Pourquoi? – YehCheez