Как узнать количество пропущенных звонков и SMS - PullRequest
5 голосов
/ 01 октября 2011

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

Теперь самая большая проблема - как подсчитать?

Я искал в Интернете, но не смог найти никакого решения.

Заранее спасибо.

Ответы [ 2 ]

22 голосов
/ 01 октября 2011

http://developer.android.com/reference/android/provider/CallLog.Calls.html

Взгляните на этот CallLog класс. Все, что вам нужно, это запросить телефон о любых вызовах, а затем извлечь пропущенные (или сделать это, когда вы запрашиваете телефон, в аргументах выбора). То же самое относится и к сообщениям. SMS хранятся в контент-провайдере под "content://sms/"

Тогда просто получите количество строк в Курсоре, которое возвращается запросом. :)

Надеюсь, это поможет.

Редактировать: для пропущенных вызовов:

 String[] projection = { CallLog.Calls.CACHED_NAME, CallLog.Calls.CACHED_NUMBER_LABEL, CallLog.Calls.TYPE };
       String where = CallLog.Calls.TYPE+"="+CallLog.Calls.MISSED_TYPE;          
       Cursor c = this.getContentResolver().query(CallLog.Calls.CONTENT_URI, selection,where, null, null);
       c.moveToFirst();    
       Log.d("CALL", ""+c.getCount()); //do some other operation
        if(c.getCount() == SOME_VALUE_TO_START_APP_ONE)//...etc etc

В предложении where вы задаете условие для выбора данных. В нашем случае нам нужно все, тип которого равен CallLog.Calls.MISSED_TYPE. Мы выбираем проект Имя звонящего и его номер, конечно же, вы можете указать дополнительную информацию для запроса, например, тип номера, например, мобильный, домашний, рабочий. Выражение эквивалентно запросу SQL, что-то вроде: SELECT CACHED_NAME, CACHED_NUMBER_LABEL, TYPE FROM CONTENT_URI WHERE TYPE=MISSED_TYPE

Для этого необходимо добавить разрешения в Манифест

 <uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
 <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>

Для запроса SMS ContentProvider:

Uri sms_content = Uri.parse("content://sms");
Cursor c = this.getContentResolver().query(sms_content, null,null, null, null);
c.moveToFirst();
Log.d("SMS COUNT", ""+c.getCount()); //do some other operation
//Here proceed with the what you wanted
if(c.getCount() == SOME_VALUE_TO_START_APP_ONE)//...etc etc

Вы можете углубиться в дерево контента, например, указав тип SMS-сообщения, например: content://sms/sent или content://sms/inbox, и добавить проекцию и выбор для второго аргумента метода query(), например, имя, лицо, статус сообщение (как пример Calls).

Для этого требуется разрешение:

 <uses-permission android:name="android.permission.READ_SMS"></uses-permission>
0 голосов
/ 06 декабря 2014

Поскольку у меня недостаточно репутации, чтобы ответить на вопрос @Prasad, комментарий о

ОШИБКА -> getContentResolver () не определен для типа new Runnable () {}

getContentResolver () является частью контекста приложения, поэтому, если вы используете BroadcastReceiver, используйте контекст в функции onReceive (), как это

    @Override
    public void onReceive(Context context, Intent intent) {

    context.getContentResolver()
}

, если вы используете приведенный выше код внутри Activity, то выможно использовать

getApplicationContext().getContentResolver()

, также обязательно используйте [Ctrl + Shift + O (O не ноль)] для организации импорта

Сочетание клавиш для импорта Eclipse

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

...