Android中广播(BroadcastReceiver)的详细讲解.
1. BroadcastReceiver的注册过程:
(1).广播消息发出来后,只有订阅了该广播的对象才会接收发出来的广播消息并做出相应处理。
**(2).**Android广播分为两个方面:广播发送者和广播接收者。Android中的广播使用了观察者模式,基于消息的发布/订阅事件模型。广播接收者通过Binder机制向AMS进行注册,AMS查找符合相应条件的Broadcastreceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中。消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive()方法。
(3).广播发送者和广播接收者的执行顺序是异步的,发出去的广播不会关心有无接收者的接收,也不确定接收者是什么时候能接收到。
2. BroadcastReceiver的步骤:
(1).注册广播:广播接收者在AMS中注册广播。
(2).发送广播:广播发送者向AMS中发送广播。
(3).接收广播:广播接收者拿到广播后调用onReceive()方法执行。
以下是一个发送短信的例子,代码如下:
BroadcastReceiverHelper 类: package com.scd.broadcastreceiver.helper; import com.scd.broadcastreceiver.activity.MainActivity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; /** * 广播接收 * * @author scd * */ public class BroadcastReceiverHelper extends BroadcastReceiver { /** 上下文 */ private MainActivity mActivity = null; public BroadcastReceiverHelper(MainActivity mContext) { super(); mActivity = mContext; } @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(MainActivity.ACTION_SENDMESSAGE)) { toast("发送成功"); } else if (intent.getAction() .equals(MainActivity.ACTION_DELIVERMESSAGE)) { toast("接收成功"); } } public void toast(String text) { Toast.makeText(mActivity, text, Toast.LENGTH_SHORT).show(); } }
MainActivity类:
package com.scd.broadcastreceiver.activity; import com.scd.broadcastreceiver.R; import com.scd.broadcastreceiver.helper.BroadcastReceiverHelper; import android.app.Activity; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.telephony.gsm.SmsManager; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { private Button mButton = null; /** 发送短信 */ public static String ACTION_SENDMESSAGE = "com.scd.broadcastreceiver.MainActivity.SendMessage"; /** 接收短信 */ public static String ACTION_DELIVERMESSAGE = "com.scd.broadcastreceiver.MainActivity.DeliverMessage"; /** Reciver类 */ private BroadcastReceiverHelper mHelperS = null; private BroadcastReceiverHelper mHelperD = null; /** 短信管理类 */ private SmsManager mSmsManager = null; /** 电话号码 */ private String mTelephone = "13607567010"; /** 短信内容 */ private String mContext = "你好,有什么需要帮助的吗?"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton = (Button) findViewById(R.id.sendBroadcast); mButton.setOnClickListener(this); mSmsManager = SmsManager.getDefault(); // 注册广播 registerBroadcast(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.sendBroadcast: { //发送广播 sendBroadcastReceiver(mTelephone, mContext); break; } default: break; } } /** * 注册广播 */ public void registerBroadcast() { // 发送 IntentFilter intentFilterS = new IntentFilter(ACTION_SENDMESSAGE); mHelperS = new BroadcastReceiverHelper(MainActivity.this); this.registerReceiver(mHelperS, intentFilterS); // 接收 IntentFilter intentFilterD = new IntentFilter(ACTION_DELIVERMESSAGE); mHelperD = new BroadcastReceiverHelper(MainActivity.this); this.registerReceiver(mHelperD, intentFilterD); } /** * 发送广播 短信发送的过程:发送的时候需要发送广播一次,接收的时候需要发送广播一次 */ public void sendBroadcastReceiver(String telephone, String content) { if (telephone != null) { Intent sIntent = new Intent(ACTION_SENDMESSAGE); // 短信成功发送后才发送该广播 PendingIntent sentIntent = PendingIntent.getBroadcast( MainActivity.this, 0, sIntent, 0); Intent dIntent = new Intent(ACTION_DELIVERMESSAGE); // 短信接收后才发送该广播 PendingIntent deliveryIntent = PendingIntent.getBroadcast( MainActivity.this, 0, dIntent, 0); mSmsManager.sendTextMessage(telephone, null, content, sentIntent, deliveryIntent); // this.sendBroadcast(intent); } } }
注意:需要添加以下权限:
<!-- 短信权限 --> <uses-permission android:name="android.permission.SEND_SMS" > </uses-permission> <uses-permission android:name="android.permission.READ_SMS" > </uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS" > </uses-permission>
本文向大家介绍Android BroadcastReceiver接收收到短信的广播,包括了Android BroadcastReceiver接收收到短信的广播的使用技巧和注意事项,需要的朋友参考一下 一、知识介绍 1、broadcastReceiver是广播接受者,四大组件之一。 2、Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息。 3、使用场景:
本文向大家介绍Android入门:广播发送者与广播接收者详细介绍,包括了Android入门:广播发送者与广播接收者详细介绍的使用技巧和注意事项,需要的朋友参考一下 一、广播发送者&广播接收者介绍 1.广播接收者 广播接收者简单地说就是接收广播意图的Java类,此Java类继承BroadcastReceiver类,重写: public void onReceive(Context context,I
本文向大家介绍详解Android短信的发送和广播接收实现短信的监听,包括了详解Android短信的发送和广播接收实现短信的监听的使用技巧和注意事项,需要的朋友参考一下 本文介绍了Android短信的发送和广播接收者实现短信的监听,要注意Android清单中权限的设置以及广播的注册监听实现,废话不多说,代码如下: 以下就是 Android清单的XML AndroidManifest.xml 发送短息
我正在尝试设置一个类来接收短信和发送状态。以下是我的清单如何查找此任务: 我收到了收到的消息,但没有收到发送的消息,我的清单声明有问题吗?
嗨,我试图捕捉短信内容和使用我的应用程序,所以我做了一个广播接收器与许可和清单,但当设备接收短信,我的代码不运行,这意味着广播接收器不发射。我也查了这里里里外外的很多文章,有一些: Android短信接收结果到主要活动短信接收不工作 我还尝试在活动onCreate()中动态注册接收器,但没有任何变化 有人知道问题出在哪里吗?它应该只是庆祝一个消息被累犯,这样我就可以继续工作,但接收器似乎甚至没有发
我是android新手。我的项目有一个活动和一个服务。我的服务有一个广播接收器,而活动有一个广播发送器,它在PeriodSender方法中。动态地,当我注册接收者时,在服务开始时它不会调用,但是如果我在几分钟后发送了一些东西,它就会调用。但是我想在清单中注册它,我已经在清单中包含了接收方的详细信息,但是接收方没有调用。我的接收方类名是MyReceiver21,意图操作是My_ACTION1。实际上