2012-01-30 113 views
0

我使用Broadcast Receiver在手机启动时接收广播,并从那里我要注册PhoneStateListenerContentObserver。不幸的是,它不会让我使用setReceiver()方法来处理ContentObserver,就像我的主要活动一样。 PhoneStateListenerstartService()也有类似的问题,但我能够使用通过的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); 

} 

}

回答

1

这不解决setReceiver的问题。调用此方法的正确方法是什么?

在战术上,Android中任何地方都没有setReceiver()方法。如果SmsObserver应该是ContentObserver,则可以使用ContentResolvernotifyChange()进行注册。

在策略上,您的代码是无用的,因为您的过程可以在onReceive()结束后不久终止,这使得所有这些工作都没有意义。

+0

它是否能够被终止,因为我在BroadcastReceiver中运行它,或者它是否也适用于活动?我在主要活动中使用了onCreate中的相同代码,并且没有注意到ContentObserver在任何时间长度后都停止。它正在观察发送的SMS信箱并在onChange()中刷新我的小部件,因为它在关机时终止了,我试图在手机启动时再次启动它。 – 2012-01-30 20:27:39

+0

@MattHarris:“它能够被终止,因为我在BroadcastReceiver中运行它,还是这也适用于Activities? - 如果您不在前台,Android最终会终止您的流程。 http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html#Lifecycle – CommonsWare 2012-01-30 20:38:22

+0

我明白了,谢谢。 – 2012-01-30 20:51:14