Я пользуюсь Broadcast Receiver
, чтобы получать трансляцию, когда телефон загружается, и оттуда я хотел бы зарегистрировать PhoneStateListener
и ContentObserver
. К сожалению, он не позволит мне использовать метод setReceiver()
для ContentObserver
, как в моем основном действии. Аналогичная проблема возникла с PhoneStateListener
и startService()
, но я смог использовать пройденный context
, чтобы он работал. Это не решает проблему для setReceiver
. Каков правильный способ вызова этого метода?Запуск ContentObserver при загрузке телефона
Кстати ошибка дает это "метод setReceiver (SmsObserver) не определено для типа контекста"
Мой код:
public class BootReceiver extends BroadcastReceiver {
private Context mContext;
@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
// Get the telephony manager
TelephonyManager telephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
// Create a new PhoneStateListener
PhoneStateListener listener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (state == TelephonyManager.CALL_STATE_IDLE) {
Intent update = new Intent(mContext,
UpdateService.class);
mContext.startService(update);
}
}
@Override
public void onDataActivity(int direction) {
if (direction == TelephonyManager.DATA_ACTIVITY_NONE) {
Intent update = new Intent(mContext,
UpdateService.class);
mContext.startService(update);
}
}
};
// Register the listener with the telephony manager
telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
telephonyManager.listen(listener,
PhoneStateListener.LISTEN_DATA_ACTIVITY);
SmsObserver smsSentObserver = new SmsObserver(new Handler(), mContext);
//Unable to call this method
mContext.setReceiver(smsSentObserver);
}
}
Может ли он быть разорван, потому что я запускаю его в BroadcastReceiver, или это относится также к действиям? Я использовал тот же бит кода в onCreate в своем основном действии и не заметил, что ContentObserver останавливается через какое-то время. Он просматривает отправленный поле SMS и обновляет мой виджет в onChange(), так как он завершается при завершении работы. Я пытаюсь запустить его снова, когда телефон загружается. –
@MattHarris: «Можно ли его завершить, потому что я запускаю его в BroadcastReceiver, или это относится также к действиям?» - если вы не находитесь на переднем плане, Android в конечном итоге прекратит ваш процесс. http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html#Lifecycle – CommonsWare
Я вижу, спасибо. –