Как получить список последних контактов в устройстве Android - PullRequest
0 голосов
/ 23 января 2019

Мне нужно получить список контактов, которые недавно использовались за последние 24 часа и наиболее часто используются.

Я много искал, но не нашел способа сделать это.Я также узнал, что Google отозвал URI, чтобы получить часто используемые контакты: https://developer.android.com/reference/android/provider/ContactsContract.Contacts#CONTENT_FREQUENT_URI

Но что заменитель этого URI не дается?Пожалуйста, дайте мне знать, как этого добиться:

  1. Получить список контактов, с которыми недавно контактировали в последние 24 часа.
  2. Выбрать 3 наиболее часто используемых контакта.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Весь смысл отказа от полей CONTENT_FREQUENT_URI, а также полей TIMES_CONTACTED и LAST_TIME_CONTACTED в таблице контактов заключается в предотвращении доступа приложений к информации, которую вы ищете.

Google теперь считает эту информацию конфиденциальной информацией пользователя и не позволит приложениям получать эту информацию в будущем.

Однако, исходя из моего опыта, мне кажется, что все устройства, которые я знаю или которыми пользуюсьнаши пользователи по-прежнему разрешают доступ к устаревшему API, поэтому, если вам нужно что-то, что будет хорошо для большинства ваших пользователей в течение следующего года, вы все равно можете его использовать.

Код должен выглядеть примерно так:

String[] projection = new String[] { Contacts._ID, Contacts.DISPLAY_NAME, Contacts.LAST_TIME_CONTACTED };

Cursor lastContacted = getContentResolver().query(Contacts.CONTENT_URI, projection, Contacts.LAST_TIME_CONTACTED + " < " + lastDayTimestamp, null, Contacts.LAST_TIME_CONTACTED + " DESC");
DatabaseUtils.dumpCursor(lastContacted);

Cursor mostContacted = getContentResolver().query(Contacts.CONTENT_URI, projection, null, null, Contacts.TIMES_CONTACTED + " DESC");
DatabaseUtils.dumpCursor(mostContacted); // might want to limit this to 3
0 голосов
/ 23 января 2019
public class MainActivity extends AppCompatActivity {

ListView listView ;
ArrayList<String> StoreContacts ;
ArrayAdapter<String> arrayAdapter ;
Cursor cursor ;
String name, phonenumber ;
public  static final int RequestPermissionCode  = 1 ;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    listView = (ListView)findViewById(R.id.listview1);

    button = (Button)findViewById(R.id.button1);

    StoreContacts = new ArrayList<String>();

    EnableRuntimePermission();

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            GetContactsIntoArrayList();

            arrayAdapter = new ArrayAdapter<String>(
                    MainActivity.this,
                    R.layout.contact_items_listview,
                    R.id.textView, StoreContacts
            );

            listView.setAdapter(arrayAdapter);


        }
    });

}

public void GetContactsIntoArrayList(){

    cursor = 
getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
null,null, null, null);

    while (cursor.moveToNext()) {

        name = 
  cursor.getString(cursor.getColumnIndex 
(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAM 
   E));

        phonenumber = 

 cursor.getString(cursor.getColumnIndex 
(ContactsContract.CommonDataKinds.Phone.NUMBER));

        StoreContacts.add(name + " "  + ":" + " " + phonenumber);
    }

    cursor.close();

}

public void EnableRuntimePermission(){

    if (ActivityCompat.shouldShowRequestPermissionRationale(
            MainActivity.this,
            Manifest.permission.READ_CONTACTS))
    {

        Toast.makeText(MainActivity.this,"CONTACTS permission allows us to Access 
CONTACTS app", Toast.LENGTH_LONG).show();

    } else {

        ActivityCompat.requestPermissions(MainActivity.this,new String[]{
                Manifest.permission.READ_CONTACTS}, RequestPermissionCode);

    }
}

@Override
public void onRequestPermissionsResult(int RC, String per[], int[] PResult) {

    switch (RC) {

        case RequestPermissionCode:

            if (PResult.length > 0 && PResult[0] == 
PackageManager.PERMISSION_GRANTED) {

                Toast.makeText(MainActivity.this,"Permission Granted, Now your 
application can access CONTACTS.", Toast.LENGTH_LONG).show();

            } else {

                Toast.makeText(MainActivity.this,"Permission Canceled, Now your 
application cannot access CONTACTS.", Toast.LENGTH_LONG).show();

            }
            break;
    }
}


}
...