Я пытаюсь выяснить, как создать список входящих сообщений SMS, например список SMS, из собственного приложения SMS Messenger, которое поставляется с Android. У меня есть следующий код, но он кажется очень медленным, если у вас много SMS-сообщений. Я надеялся на некоторое руководство по лучшему методу.Как создать список SMS?
Я надеюсь получить адрес, фрагмент (или последнее сообщение в разговоре) и лицо (контактное отображаемое имя) и отобразить их в ListView.
Следующий код работает с извлечением данных, но когда я запускаю его на телефоне с большим количеством сообщений, действие зависает в течение нескольких секунд, пока выполняются все запросы.
Следующие фрагменты кода - это цепочки, которые я использую для получения информации, о которой я упоминал. Кроме того, следует ли использовать потоки в Activity или что-то в этом роде? Поток для выполнения запросов, а затем обновите ListView?
Спасибо за любую помощь заранее!
private void getConversations(ArrayList<Conversation> conversationList){
Uri uri = Uri.parse("content://sms/conversations");
String[] selection = {"thread_id", "snippet"};
Cursor cur = context.getContentResolver().query(uri, selection, null, null, "date DESC");
if(cur.getCount() != 0){
while(cur.moveToNext()) {
String thread_id = cur.getString(cur.getColumnIndex("thread_id"));
String snippet = cur.getString(cur.getColumnIndex("snippet"));
Conversation conversation = new Conversation(thread_id, snippet);
conversationList.add(conversation);
}
}
cur.close();
}
private void getAddresses(ArrayList<Conversation> conversationList){
Uri uri = Uri.parse("content://sms");
String[] selection = {"address"};
for(Conversation conversation : conversationList){
Cursor cur = context.getContentResolver().query(uri, selection , "thread_id=?", new String[] {conversation.getThread_id()}, null);
if(cur.getCount() != 0){
cur.moveToFirst();
conversation.setAddress(cur.getString(cur.getColumnIndex("address")));
}
cur.close();
}
}
private void getDisplayName(ArrayList<Conversation> conversationList){
Log.d(TAG, "Adding display names");
for(Conversation conversation: conversationList) {
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, conversation.getAddress());
Cursor cur = context.getContentResolver().query(uri, new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME}, null, null, null);
if(cur.moveToFirst()){
conversation.setPerson(cur.getString(cur.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)));
}
cur.close();
}
}
Awesome, спасибо! Я рассмотрю это. Кроме того, являются ли эти запросы предпочтительным методом сбора необходимой информации для создания почтового ящика SMS? – user3578624