第十二单元总结

BroadcastReceiver是Android中用于处理系统或应用间消息响应的组件。文章详细介绍了如何创建和注册BroadcastReceiver,包括对SD卡状态监听的系统广播、普通广播的发送与接收、有序广播的执行顺序以及粘性广播的特点。
摘要由CSDN通过智能技术生成

什么是BroadCastReceiver

定义:广播是应用于系统、应用、控件、线程间消息响应的组件

第一步:新建一个类继承BroadcastReceiver

public class SdCardBroadcastReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

if("android.intent.action.MEDIA_MOUNTED".equals(action)){

System.out.println("sd卡已挂载");

}else if("android.intent.action.MEDIA_UNMOUNTED".equals(action)){

} } }

第二步:在清单文件中注册

<receiver android:name="com.example.sdbroadcast.SdCardBroadcastReceiver"/>

第三步:在清单文件中添加意图过滤器,action里写监听的内容

<intent-filter>

<action android:name="android.intent.action.MEDIA_MOUNTED"/>

<action android:name="android.intent.action.MEDIA_UNMOUNTED"/>

<data android:scheme="file"/>

</intent-filter>

2:普通广播

第一步:新建一个类继承BroadcastReceiver

public class MyBroadcastReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

if(intent.getAction().equals("android.1804.receiver")){

Bundle bundle = intent.getBundleExtra("mybundle");

String message = bundle.getString("msg");

Log.d("amy",message); //端午节

}

}

}

第二步:注册BroadcastReceiver

<receiver android:name=".MyBroadcastReceiver">

<!--广播优先级0-1000,默认500-->

<intent-filter android:priority="1000">

<action android:name="android.1804.receiver" />

</intent-filter>

</receiver>

public class ReceiverActivity extends AppCompatActivity {

MyBroadcastReceiver registerReceiver;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_receiver);

registerReceiver = new MyBroadcastReceiver();

IntentFilter intentFilter = new IntentFilter();

intentFilter.setPriority(1000);

intentFilter.addAction("android.1804.receiver");

registerReceiver(registerReceiver,intentFilter);

}

@Override

protected void onDestroy() {

super.onDestroy();

unregisterReceiver(registerReceiver); }}

第三步:发送广播

public void sendBroadcast(View view) {

Intent intent=new Intent();

intent.setAction("android.1804.receiver");

Bundle bundle=new Bundle();

bundle.putString("msg","端午节快乐");

intent.putExtra("mybundle",bundle);

//以下这行代码静态注册时必须添加,第二个参数为自定义广播接收者类名

// intent.setComponent(new ComponentName(getPackageName(),"com.example.myapplication.MyBroadcastReceiver"));

sendBroadcast(intent);

}

3:有序广播

第一步:新建一个类继承BroadcastReceiver

public class MyBroadcastReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

if(intent.getAction().equals("android.1804.receiver")){

Bundle bundle = intent.getBundleExtra("mybundle");

String message = bundle.getString("msg");

Log.d("amy",message); //端午节

}

}

}

第二步:注册BroadcastReceiver(为了看到有序,案例中创建了两个广播接收者)

<receiver android:name=".MyBroadcastReceiver">

<!--广播优先级0-1000,默认500-->

<intent-filter android:priority="100">

<action android:name="android.1804.receiver" />

</intent-filter>

</receiver>

<receiver android:name=".MyBroadcastReceiver2">

<intent-filter android:priority="1000">

<action android:name="android.1804.receiver"/>

</intent-filter>

</receiver>

第三步:发送广播

public void sendBroadcast(View view) {

Intent intent=new Intent();

intent.setAction("android.1804.receiver");

intent.putExtra("msg2","端午节快乐");

sendOrderedBroadcast(intent,null);

}

优先级高的先收到

4:粘性广播

第二步:注册BroadcastReceiver

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_receiver);

sendStickyBroadcast(new Intent("android.1804.receiver.sticky"));

}

public void sendStickyBroadcast(View view) {

MyBroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();

IntentFilter intentFilter = new IntentFilter("android.1804.receiver.sticky");

registerReceiver(myBroadcastReceiver,intentFilter);

}

粘性广播无需先注册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值