Я написал приложение-контакт-приложение с BroadcastReceiver (для состояний телефона), которое уведомляет пользователя о каждом пропущенном вызове с помощью WindowManager (похоже на напоминания в приложениях типа " Any.DO "). проблема в том, что это работает только до тех пор, пока мое приложение работает, как только я его закрываю, это уведомление, похоже, отключено. но пользователь должен получить четкое сообщение о каждом пропущенном вызове (включая спектральную функцию обработки этого пропущенного вызова) также, когда приложение неактивно.уведомление о пропущенных звонках, когда приложение не активно
это мой приемник
public class CallReceiver extends BroadcastReceiver {
private static String lastState = TelephonyManager.EXTRA_STATE_IDLE;
@Override
public void onReceive(final Context context, Intent intent) {
и это часть AndroidManifest для него
<receiver android:name="addressbook.CallReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
мой следующий шаг должен был написать сервис, чтобы сделать эту работу, и проверить, если это делает то, что я хочу. идея заключалась не в использовании BroadcastReceiver, а в регистрации contentObserver в службе, которая проверяет наличие новых пропущенных вызовов в журналах вызовов. Я попытался следовать всем советам, которые мог найти на этом форуме об услугах, но я не мог запустить эту службу.
это часть в AndroidManifest
<service
android:name="addressbook.ContentObserverService"
android:enabled="true"/>
и это место, где я пытаюсь запустить эту службу в AddressBook.java
startService(new Intent(getApplicationContext(), ContentObserverService.class));
public class ContentObserverService extends Service {
private Observer observer;
public void onCreate() {
super.onCreate();
D.d("observer created");
Handler handler = new Handler();
observer = new Observer(handler);
getContentResolver().registerContentObserver(Calls.CONTENT_URI, true, observer);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
D.d("onStartCommand");
super.onStartCommand(intent, flags, startId);
return Service.START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
getContentResolver().unregisterContentObserver(observer);
}
но ни OnCreate, ни onStartCommand метод получает и я не получаю никаких ошибок или предупреждений.
так у меня есть два вопроса:
- является услуга правильным решением моей проблемы, или есть лучшее решение существующих
- если услуга является правильным решением, почему она не запускается?
РЕДАКТИРОВАТЬ: странная вещь заключается в том, что solutin с транслятором всегда работал на эмуляторе (даже когда мое приложение закрывается). проблема возникает только тогда, когда я получаю звонок на мой настоящий мобильный телефон.
, но проблема заключается в том, что приемник PhoneStateChange не работает, когда мое приложение закрыт, поэтому третий шаг никогда не произойдет, если приложение неактивно. если шаг 1 будет работать для закрытого приложения, у меня не будет никаких проблем. поэтому другой вопрос будет. что я должен сделать, чтобы мой приемник работал, даже когда приложение закрыто. – richard
проверить мой отредактированный ответ – AAnkit
спасибо, но это то, что я сделал. и он работает только тогда, когда приложение не закрыто. – richard