如何在主要活动中注册接收者?

时间:2013-01-18 10:51:04

标签: android broadcastreceiver android-activity

我有一个SmsReceiver课,我想在主要活动中注册,我该怎么办?

我是Android新手。

5 个答案:

答案 0 :(得分:3)

你可以做两件事:

  1. BroadcastReceiver
  2. 中创建并定义Manifest
  3. 在代码中创建并注册BroadcastReceiver
  4. 对于选项2(您要问的):

    在代码中创建BroadcastReceiver(MyBroadcastReceiver)。 在Activity

    的范围内声明MyBroadcastReceiver
    MyBroadcastReceiver mMyBroadcastReceiver;
    

    BroadcastReceiver中注册Activity

    IntentFilter filter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED);
    this.registerReceiver(mMyBroadcastReceiver, filter);
    

答案 1 :(得分:2)

要让服务接收短信,请按照以下步骤操作:

  1. 更新清单,为您的应用授予接收短信的权限 (WRITE_SMS,READ_SMS,RECEIVE_SMS)
  2. 请勿使用接收器意图过滤器更新清单! (哪一个 每个示例代码在线似乎都可以)
  3. 在您的服务中,在您的服务类

    中创建一个嵌套的BroadcastReceiver类
    private class SMSreceiver extends BroadcastReceiver
    {
        private final String TAG = this.getClass().getSimpleName();
    
        @Override
        public void onReceive(Context context, Intent intent)
        {
            Bundle extras = intent.getExtras();
    
            String strMessage = "";
    
            if ( extras != null )
            {
                Object[] smsextras = (Object[]) extras.get( "pdus" );
    
                for ( int i = 0; i < smsextras.length; i++ )
                {
                    SmsMessage smsmsg = SmsMessage.createFromPdu((byte[])smsextras[i]);
    
                    String strMsgBody = smsmsg.getMessageBody().toString();
                    String strMsgSrc = smsmsg.getOriginatingAddress();
    
                    strMessage += "SMS from " + strMsgSrc + " : " + strMsgBody;                    
    
                    Log.i(TAG, strMessage);
                }
    
            }
    
        }
    
    }
    
  4. 在您的服务类中,注册以接收 android.provider.Telephony.SMS_RECEIVED意图过滤器:

    public class ServiceCommunicator extends Service
    {
        private SMSreceiver mSMSreceiver;
        private IntentFilter mIntentFilter;
    
        @Override
        public void onCreate()
        {
            super.onCreate();
    
            //SMS event receiver
            mSMSreceiver = new SMSreceiver();
            mIntentFilter = new IntentFilter();
            mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
            registerReceiver(mSMSreceiver, mIntentFilter);
        }
    
        @Override
        public void onDestroy()
        {
            super.onDestroy();
    
            // Unregister the SMS receiver
            unregisterReceiver(mSMSreceiver);
        }
    }
    
  5. 就是这样!

    注意: 包括你想知道为什么我没有从一个单独的BroadcastReceiver类中绑定到我的服务 - 它不起作用,因为bindService()不可用。

答案 2 :(得分:1)

对于API级别19及以上

 IntentFilter smsFilter = new IntentFilter();
 smsFilter.addAction(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
registerReceiver(this.receiver, filter);

答案 3 :(得分:0)

正如您要求在符合BroadcastReceiver的{​​{1}}内注册MainActivity

这是代码看起来像==&gt;

registerReceiver-codewise-inside-MainActivity

答案 4 :(得分:0)

private BroadcastReceiver receiver = new BroadcastReceiver() {

   @Override
   public void onReceive(Context context, Intent intent) {
       //some action
   }
};

IntentFilter filter = new IntentFilter("YOUR_ACTION");
registerReceiver(receiver, filter);

希望这有帮助