Вопрос:
Я работаю над приложением, где мне нужно получить 5 недавно набранных номеров. Я могу сортировать числа в порядке убывания, так как сначала набираются номера набранных номеров. Я использую следующий код для получения последних чисел.
dialledCall = (TextView)findViewById(R.id.dialledCall); String strOrder = CallLog.Calls.DATE + » DESC»; Cursor mCallCursor = getApplicationContext().getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.TYPE ,null, strOrder); mCallCursor.moveToFirst(); do { if( i >5 ) break; mobileNumber = mCallCursor.getString(mCallCursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER)); number += mobileNumber + «n»; i++; } while (mCallCursor.moveToNext()); dialledCall.setText(number);
С этим я могу сортировать числа в недавнем порядке, а также я только что забрал последние 5 номеров. Но запрос возвращает все числа, я имею в виду Dialed, Missed и Received. Но здесь я хочу только набранные номера.
Я знаю, что в этом запросе есть что-то делать с CallLog.Calls.TYPE.
Я попытался передать значение null, но он возвращает все числа.
Я также попробовал CallLog.Calls.OUTGOING_TYPE вместо него, но он дает ошибку, что значение int недопустимо, оно должно быть строковым значением.
Любые предложения по замене вышеуказанного кода, чтобы получать только набранные вызовы.
Примечание. Я уже смотрел , но не предоставляет решение только для набора набранных номеров.
Лучший ответ:
Я решил проблему, поэтому я отправляю ее для будущих посетителей.
String mobileNumber=»»; int i = 1; String number = «»; TextView dialledCall; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); dialledCall = (TextView)findViewById(R.id.dialledCall); // String[] strFields = { android.provider.CallLog.Calls.NUMBER, android.provider.CallLog.Calls.TYPE, android.provider.CallLog.Calls.CACHED_NAME, android.provider.CallLog.Calls.CACHED_NUMBER_TYPE, android.provider.CallLog.Calls.DURATION }; String strOrder = CallLog.Calls.DATE + » DESC»; Cursor mCallCursor = getApplicationContext().getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.TYPE + » = » + CallLog.Calls.OUTGOING_TYPE ,null, strOrder); mCallCursor.moveToFirst(); do { if( i >5 ) break; mobileNumber = mCallCursor.getString(mCallCursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER)); number += mobileNumber + «n»; i++; } while (mCallCursor.moveToNext()); dialledCall.setText(number); }
Здесь CallLog.Calls.TYPE + » = » + CallLog.Calls.OUTGOING_TYPE в запросе отделяет набранные вызовы.
Ответ №1
Вы можете использовать класс CallLog для получения этой информации (см. http://developer.android.com/reference/android/provider/CallLog.Calls.html).
Вам интересен метод getLastOutgoingCall, который возвращает последний номер телефона.
Проверьте журналы вызовов. Вы можете легко получить доступ к этому. Сделайте что-нибудь вроде
Определить,
public Cursor mCallCursor;
Затем определите поля, которые вы хотите получить из журнала вызовов,
public static final String[] STR_FIELDS = { android.provider.CallLog.Calls.NUMBER, android.provider.CallLog.Calls.TYPE, android.provider.CallLog.Calls.CACHED_NAME, android.provider.CallLog.Calls.CACHED_NUMBER_TYPE, android.provider.CallLog.Calls.DATE, android.provider.CallLog.Calls.DURATION, android.provider.CallLog.Calls.CACHED_NUMBER_LABEL,android.provider.CallLog.Calls.NUMBER };
Установите порядок,
public static final String STR_ORDER = android.provider.CallLog.Calls.DATE + “DESC”;
Вызов курсора.
mCallCursor = getContentResolver().query( android.provider.CallLog.Calls.CONTENT_URI, STR_FIELDS, null, null, STR_ORDER);