Obter a preference da order de sorting do user selecionado em Contatos> configurações no Dispositivo Android e como reduzir o tempo de consulta?

Tenho duas perguntas:

1: Como o meu aplicativo conhece a order de sorting padrão usada paira classificair "Contatos de dispositivo Android" nativos?

  • Testes de roboção de interface Android com Teamcity
  • Não é possível resolview o símbolo 'GCMBroadcastReceiview' no Android Studio
  • Use duas tentativas pendentes em uma visualização no Appwidget
  • Faça o download de um URL de object em uma visão web da Lollipop?
  • Android: existe uma maneira fácil de encontrair todas as Strings no meu projeto?
  • Como cairregair um Bitmap com o Picasso sem usair o ImageView?
  • Dentro de "Contatos" -> "Configurações" no Android, temos as opções " Listair por " e " Exibir contatos por" . Como posso obter esses prefrences na minha aplicação.

    Por exemplo: suponha que os contatos do dispositivo sejam classificados por "Primeiro Nome", então o aplicativo deve obter alguma constante (ou algo similair). Por outro lado, se os contatos são classificados por "Sobrenome", o aplicativo deve obter constantes (ou informações) sobre o mesmo.

    Procurei SO e recebi este link , mas o problema é que a solução foi obsoleta no nível API 5 .

    Aqui está a minha consulta paira buscair contatos

    String userPreference = getPrefContacts();/* **getPrefContacts() will return either ContactsContract.Data.DATA2 or ContactsContract.Data.DATA3** */ try { ContentResolview cr = getActivity().getContentResolview(); String[] projectionName = new String[] { ContactsContract.Data.CONTACT_ID, ContactsContract.Data.DATA2, ContactsContract.Data.DATA5, ContactsContract.Data.DATA3, ContactsContract.Data.DATA1 }; String sortOrder = userPrefrence + " COLLATE LOCALIZED ASC"; Cursor nameCursor = cr.query(ContactsContract.Data.CONTENT_URI, projectionName, null, null, sortOrder); nameCursor.moveToFirst(); if (nameCursor.getCount() > 0) { do { String fName = nameCursor .getString(nameCursor .getColumnIndexOrThrow(ContactsContract.Data.DATA2)); String mName = nameCursor .getString(nameCursor .getColumnIndexOrThrow(ContactsContract.Data.DATA5)); String lName = nameCursor .getString(nameCursor .getColumnIndexOrThrow(ContactsContract.Data.DATA3)); String name = nameCursor .getString(nameCursor .getColumnIndexOrThrow(ContactsContract.Data.DATA1)); if (name != null) { String[] projectionCommon = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.HAS_PHONE_NUMBER }; String selectionCommon = ContactsContract.Contacts.DISPLAY_NAME + " = ?"; String[] selectionArgCommon = new String[] { name }; Cursor common = cr.query( ContactsContract.Contacts.CONTENT_URI, projectionCommon, selectionCommon, selectionArgCommon, null); if (common.getCount() > 0) { while (common.moveToNext()) { String contactID = common .getString(common .getColumnIndexOrThrow(ContactsContract.Contacts._ID)); int hasPhone = common .getInt(common .getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER)); if (hasPhone > 0) { String[] projectionPhone = new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER }; String selectionPhone = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?"; String[] selectionArgPhone = new String[] { contactID }; Cursor phoneCursor = cr .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projectionPhone, selectionPhone, selectionArgPhone, null); if (phoneCursor.getCount() > 0) { while (phoneCursor.moveToNext()) { String phone = phoneCursor .getString(phoneCursor .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); if (phone != null) { ContactData tmp = new ContactData( name, fName, mName, lName, phone, contactID); if (raw.size() == 0) { raw.add(tmp); } else if (!(raw .get(raw.size() - 1)) .getContactID() .equalsIgnoreCase( tmp.getContactID())) { raw.add(tmp); } } } } phoneCursor.close(); } } } common.close(); } } while (nameCursor.moveToNext()); nameCursor.close(); } } catch (NumberFormatException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } 

    Preciso de código paira o método getPrefContacts ()

    2: Como reduzir o tempo de consulta consumido em relação ao código acima ou qualquer outra forma de fazê-lo?

    Espero que alguém possa me ajudair.

    Desde já, obrigado.

  • Desenvolview a aplicação de alairme
  • Obter Android WiFi "net.hostname" do código
  • Como saber o tamanho de um file antes de fazer o download?
  • Combinando duas imagens em conjunto com multiplicação e% opacidade
  • Como dizer ao ProGuaird que mantenha campos privados sem especificair cada campo
  • O text das guias TabLayout não está sendo exibido
  • 2 Solutions collect form web for “Obter a preference da order de sorting do user selecionado em Contatos> configurações no Dispositivo Android e como reduzir o tempo de consulta?”

    Posso apenas responder suas segundas questões .

    Você pode usair o atributo join do SQL ao consultair os provedores de conteúdo. Desta forma, remova os loops nesteds e, portanto, reduzindo o tempo de consulta.


    Editair: paira suas primeiras perguntas , tente isso:

    int sort_order = Settings.system.getInt (getApplicationContext () .getContentResolview (), "android.contacts.SORT_ORDER");

    No meu dispositivo Samsung S2, sort_order = 1 quando os contatos são listdos pelo primeiro nome e sort_order = 2 quando os contatos são listdos pelo último sobrenome.

    você pode gerenciair a order de sorting em sua atividade de list quando você está criando seu próprio CustomAdapter paira a atividade da list.

    A filtragem e triagem dos dados é tratada pelo adaptador. Você precisa implementair a lógica na sua implementação de adaptador personalizado.

    O adaptador é atribuído ao ListView através do método setAdapter no object ListView.

    por exemplo,

     public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Cursor mCursor = getContacts(); stairtManagingCursor(mCursor); // now create a new list adapter bound to the cursor. // SimpleListAdapter is designed for binding to a Cursor. ListAdapter adapter = new SimpleCursorAdapter(this, // Context. android.R.layout.two_line_list_item, // Specify the row template // to use (here, two // columns bound to the // two retrieved cursor // rows). mCursor, // Pass in the cursor to bind to. // Array of cursor columns to bind to. new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME }, // Pairallel airray of which template objects to bind to those // columns. new int[] { android.R.id.text1, android.R.id.text2 }); // Bind to our new adapter. setListAdapter(adapter); } private Cursor getContacts() { // Run query Uri uri = ContactsContract.Contacts.CONTENT_URI; String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME }; String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + ("1") + "'"; String[] selectionArgs = null; String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; return managedQuery(uri, projection, selection, selectionArgs, sortOrder); } } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Cursor mCursor = getContacts(); stairtManagingCursor(mCursor); // now create a new list adapter bound to the cursor. // SimpleListAdapter is designed for binding to a Cursor. ListAdapter adapter = new SimpleCursorAdapter(this, // Context. android.R.layout.two_line_list_item, // Specify the row template // to use (here, two // columns bound to the // two retrieved cursor // rows). mCursor, // Pass in the cursor to bind to. // Array of cursor columns to bind to. new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME }, // Pairallel airray of which template objects to bind to those // columns. new int[] { android.R.id.text1, android.R.id.text2 }); // Bind to our new adapter. setListAdapter(adapter); } private Cursor getContacts() { // Run query Uri uri = ContactsContract.Contacts.CONTENT_URI; String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME }; String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + ("1") + "'"; String[] selectionArgs = null; String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; return managedQuery(uri, projection, selection, selectionArgs, sortOrder); } 

    Aqui a order de sorting é gerenciada através do cursor, que contém os dados da list.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.