2017-07-11 2 views
1

J'ai réussi à lire des contacts mais je veux écrire des contacts et les lire. Quelqu'un peut-il s'il vous plaît aviser comment je suis capable de faire ces deux tâches, Message d'erreur.comment lire et écrire des autorisations de contacts

Veuillez voir mon code ci-dessous pour le READ_CONTACTS Je veux également l'étendre à WRITE_CONTACTS.

 // Called when the user is performing an action which requires the app to read the 
    // user's contacts 
    public void getPermissionToReadUserContacts() { 
     // 1) Use the support library version ContextCompat.checkSelfPermission(...) to avoid 
     // checking the build version since Context.checkSelfPermission(...) is only available 
     // in Marshmallow 
     // 2) Always check for permission (even if permission has already been granted) 
     // since the user can revoke permissions at any time through Settings 
     if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) 
       != PackageManager.PERMISSION_GRANTED) { 

      // The permission is NOT already granted. 
      // Check if the user has been asked about this permission already and denied 
      // it. If so, we want to give more explanation about why the permission is needed. 
      if (shouldShowRequestPermissionRationale(
        Manifest.permission.READ_CONTACTS)) { 
       // Show our own UI to explain to the user why we need to read the contacts 
       // before actually requesting the permission and showing the default UI 
      } 

      // Fire off an async request to actually get the permission 
      // This will show the standard permission request dialog UI 
      requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, 
        READ_CONTACTS_PERMISSIONS_REQUEST); 
     } 
    } 

    // Callback with the request from calling requestPermissions(...) 
    @Override 
    public void onRequestPermissionsResult(int requestCode, 
              @NonNull String permissions[], 
              @NonNull int[] grantResults) { 
     // Make sure it's our original READ_CONTACTS request 
     if (requestCode == READ_CONTACTS_PERMISSIONS_REQUEST) { 
      if (grantResults.length == 1 && 
        grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Toast.makeText(this, "Read Contacts permission granted", Toast.LENGTH_SHORT).show(); 
      } else { 
       Toast.makeText(this, "Read Contacts permission denied", Toast.LENGTH_SHORT).show(); 
      } 
     } else { 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     } 
    } 
} 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == Activity.RESULT_OK) { 
      ContentResolver reContentResolverol = getContentResolver(); 
      Uri contactData = data.getData(); 
      @SuppressWarnings("deprecation") 
      Cursor cursor = managedQuery(contactData, null, null, null, null); 
      cursor.moveToFirst(); 
      String username = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
      String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
      Cursor phone = reContentResolverol.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
        null, 
        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, 
        null, 
        null); 
      while (phone.moveToNext()) { 
       String usernumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       phone1.setText(usernumber); 
       name1.setText(username); 
      } 

     } 
    } 

} 

Répondre

1

Vous devez demander la permission READ_CONTACTS, à la fois in the manifest et at runtime.

En outre, s'il vous plaît noter que managedQuery() a été obsolète il y a six ans, et c'était une mauvaise idée avant, puis. Veuillez utiliser des techniques plus récentes (par exemple, CursorLoader).

+0

https://developer.android.com/training/permissions/requesting.html – yanivtwin

+0

@ElderlyWatch: La solution la plus simple, tactiquement, est de changer votre 'targetSdkVersion' (typiquement dans' app/build.gradle') 22. Vous n'aurez plus besoin de gérer les autorisations d'exécution. Au-delà, je ne peux pas vous conseiller à moins que vous n'expliquiez, ** en détail **, ce que vous ne comprenez pas. – CommonsWare

+0

@ElderlyWatch: Eh bien, "WRITE_CALENDAR" n'est pas ce que vous voulez. Vous devez vérifier et demander l'autorisation d'exécution avant d'utiliser l'API nécessitant l'autorisation. Puisque demander l'autorisation affiche une boîte de dialogue et fournit un résultat de manière asynchrone, vous pouvez le faire avant de lancer l'appel 'startActivityForResult()' qui déclenche le 'onActivityResult()' que vous affichez dans votre question. – CommonsWare