2013-10-15 2 views
0

У меня есть следующий код:Как правильно отображать входящих отправителей SMS и дату?

Uri uriSMS = Uri.parse("content://sms"); 
Cursor cur = getContentResolver().query(uriSMS, 
     new String[] {"_id", "thread_id", "address", "person", "date", "body", "type"}, 
     null, null, null); 
startManagingCursor(cur); 

String[] from = new String[]{"address", "body", "date"}; 
int[] to = new int[]{R.id.sms_from, R.id.sms_body, R.id.sms_date}; 
adapter = new SimpleCursorAdapter(this, R.layout.sms_row, cur, from, to); 

setListAdapter(adapter); 

В настоящее время я использую address столбец для отображения SMS отправителя, поэтому отображается номер тел. Я хотел бы заменить номер телефона на имя человека. Я ожидал, что это person, но для большинства SMS он пуст. Тогда, date поле содержит long значение, если я хотел бы показать его в формате DD.MM.YYYY. Думаю, я могу переопределить setViewValue(), чтобы исправить это. Но есть ли другое (лучшее) решение &

Как я мог исправить эти две проблемы?

ответ

1

Для решения вопроса даты вы можете сделать это

DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
    formatter.format(Long.parseLong(dateString)); 

и имя отправителя, попробуйте этот

Cursor cs= context.getContentResolver().query(uri, new String[]{PhoneLookup.DISPLAY_NAME},condition,null,null); 
    cs.getString(cs.getColumnIndex(PhoneLookup.DISPLAY_NAME)); 
+0

Спасибо. Ваш ответ полностью не отвечает на мой вопрос. Итак, я сделал то, что мне нужно с 'setViewValue()', но ваш ответ помог, поэтому я принимаю его. Благодарю. –

0

Я думаю, что person пуст для чисел, которые не существуют в контактах.

На дату:

String strDateTime = (String) DateFormat.format("yyyy-MM-dd kk:mm", new Date(longValue)); 
+0

'person' пуст для почти всех СМС. Разве мне не нужны дополнительные разрешения для его использования? –

+0

Я не знаю, попробовать: '' – ramaral

-1

Попробуйте этот метод, чтобы показать правильная дата и время в смс. В этом случае вам нужно передать дату, которую вы получили от курсора

public String changeDate(long date) { 
     SimpleDateFormat sdf = new SimpleDateFormat(); 
     Date dt = new Date(date); 
     Date now = new Date(); 
     dt.setTime(date); 

     if (now.getYear()==dt.getYear() && now.getMonth()==dt.getMonth() && now.getDate()==dt.getDate()) 
      sdf.applyPattern("h:mm a"); 
     else if (now.getYear()==dt.getYear()) 
      sdf.applyPattern("d MMM" + " " + "h:mm a"); 
     else 
      sdf.applyPattern("d MMM yyyy" + " " + "h:mm a"); 

     return sdf.format(dt); 
    } 
Смежные вопросы