Contacts
Permissions
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.contactdemo">
<application
...>
...
</application>
<uses-permission android:name="android.permission.READ_CONTACTS" />
</manifest>
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, READ_CONTACTS_REQUEST_CODE);
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == READ_CONTACTS_REQUEST_CODE) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
...
} else {
...
}
}
}
Load contacts
public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor>{
...
}
LoaderManager.getInstance(this).restartLoader(this.CONTACT_LOADER,null,this);
@NonNull
@Override
public Loader<Cursor> onCreateLoader(int id, @Nullable Bundle args) {
if (id == CONTACT_LOADER) {
String[] SELECTED_FIELDS = new String[]
{
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
Contacts 1
};
return new CursorLoader(this, ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
SELECTED_FIELDS,
null,
null,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " " + (isASC ? "ASC" : "DESC"));
}
return null;
}
@Override
public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor data) {
if (loader.getId() == CONTACT_LOADER) {
List<ContactItem> contacts = new ArrayList<>();
if (data != null) {
while (!data.isClosed() && data.moveToNext()) {
String phone = data.getString(1);
String name = data.getString(2);
contacts.add(new ContactItem(name, phone));
}
contactListAdapter.clear();
contactListAdapter.addAll(contacts);
contactListAdapter.notifyDataSetChanged();
data.close();
}
}
}
@Override
public void onLoaderReset(@NonNull Loader<Cursor> loader) {
loader = null;
}
}
Contacts 2