studio read obtener lista example contactos android android-studio permissions contacts android-contacts

read - Denegación de permiso: proveedor de apertura com.android.providers.contacts.ContactsProvider2 de ProcessRecord en Android Studio



get contacts android studio (4)

Recibo este error cuando intento leer los contactos del teléfono e READ_CONTACTS permiso READ_CONTACTS en el archivo Manifest. Y lo extraño es que estaba funcionando bien en Eclipse, pero cuando convertí mi proyecto a Gradle y lo ejecuté en Android Studio , recibo este error.

logcat dice:

Denegación de permiso: proveedor de apertura com.android.providers.contacts.ContactsProvider2 from ProcessRecord {302f069 29282: com.GP/u0a322} (pid = 29282, uid = 10322) requiere android.permission.READ_CONTACTS android.permission.WRITE

Aquí está el código de manifiesto:

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <!-- Read Contacts from phone --> <uses-permission android:name="android.permission.read_contacts" /> <uses-permission android:name="android.permission.read_phone_state" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.READ_CALL_LOG" />


Debido a la actualización de Marshmallow Solicitando permisos en el tiempo de ejecución, el permiso de contacto de lectura no funciona. El código de ejemplo es

import android.Manifest; import android.content.ContentResolver; import android.content.pm.PackageManager; import android.database.Cursor; import android.os.Build; import android.provider.ContactsContract; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { // The ListView private ListView lstNames; // Request code for READ_CONTACTS. It can be any number > 0. private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Find the list view this.lstNames = (ListView) findViewById(R.id.lstNames); // Read and show the contacts showContacts(); } /** * Show the contacts in the ListView. */ private void showContacts() { // Check the SDK version and whether the permission is already granted or not. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS); //After this point you wait for callback in onRequestPermissionsResult(int, String[], int[]) overriden method } else { // Android version is lesser than 6.0 or the permission is already granted. List<String> contacts = getContactNames(); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, contacts); lstNames.setAdapter(adapter); } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Permission is granted showContacts(); } else { Toast.makeText(this, "Until you grant the permission, we canot display the names", Toast.LENGTH_SHORT).show(); } } } /** * Read the name of all the contacts. * * @return a list of names. */ private List<String> getContactNames() { List<String> contacts = new ArrayList<>(); // Get the ContentResolver ContentResolver cr = getContentResolver(); // Get the Cursor of all the contacts Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); // Move the cursor to first. Also check whether the cursor is empty or not. if (cursor.moveToFirst()) { // Iterate through the cursor do { // Get the contacts name String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); contacts.add(name); } while (cursor.moveToNext()); } // Close the curosor cursor.close(); return contacts; } }

Las capturas de pantalla de muestra:

Tengo el siguiente código fuente de here




Simplemente agregue esto a su AndroidManifest.xml dentro de <manifest> :

<uses-permission android:name="android.permission.READ_CONTACTS"/>