1、 简单的介绍一下BroadCast的使用,理论方法的比较欠缺,以下内容纯粹是自己的个人总结,不足之处,欢迎大家提出宝贵的意见,程序代码运行,真是有效,可以使用
2、BroadCast是安卓四大组件之一,和Service不一样,一个是绑定的使用, 一个是全局监听,方便组件之间的通信。
3、主要有 Normal BroadCast (普通广播) Ordered BroadCast (有序广播) 两种,普通广播无法将结果继续传递,无法终止 广播,有序广播可以。
4、使用方法:MainActivity 发送消息,让他一直发送消息,,你也可以直接发送一个字符串
Thread myThread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
i++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Message msg = new Message();
msg.what = 0x01;
msg.obj = i;
myhandler.sendMessage(msg);
}
}
});
public Handler myhandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0x01:
Log.i("dachenSend", msg.obj.toString());
StareBroadCast(msg.obj.toString());
break;
default:
break;
}
}
};
开始广播消息了 setAction 和 putExtra的key 你想怎么设置,反正就是一个标记
/**
* @Function: 开始广播消息
* @Return:
*/
private void StareBroadCast(String broadcastmsg) {
//创建Intent对象
Intent intentBroadCast = new Intent();
//设置Intent的Action的属性
intentBroadCast.setAction("BroadCast.test");
intentBroadCast.putExtra("msg_test", broadcastmsg);
//发送广播
sendBroadcast(intentBroadCast);
}
直接继承不需要使用 匿名内部类才去使用
//用于匿名内部类的
public void jump(View view) {
Intent myIntent2 = new Intent(MainActivity.this, TestActivity.class);
startActivity(myIntent2);
}
4.1 直接继承类,但是Java是单继承,多实现,一个extends用完之后就感觉心里不踏实,当然你可以把自己定义的类再继承一遍(个人经验,可以用,可能不满足撸的习惯)。这种方法 简单粗暴,,
新建 一个类
/**
* @ Create by dadac on 2018/10/10.
* @Function:
* @Return:
*/
public class MyBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("dachenReceiveExtends", intent.getAction() + "\t消息内容是:" + intent.getStringExtra("msg_test"));
}
}
这样消息就过来了,还得注册一下
注册有两种方式,个人推荐这种方式的实现,在 AndroidManifest 中直接注册即可 和<activity>是并行目录的祖册
<receiver android:name=".MyBroadCastReceiver">
<intent-filter>
<action android:name="BroadCast.test" />
</intent-filter>
</receiver>
4.2 使用匿名内部类 开启一个新的 Activity ,Service也行
public class TestActivity extends AppCompatActivity {
private MyBroadCastReceiver2 myBroadCastReceiver2;
String a;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
myBroadCastReceiver2 = new MyBroadCastReceiver2();
// 创建IntentFilter
IntentFilter filter = new IntentFilter();
// 指定BroadcastReceiver监听的Action
filter.addAction("BroadCast.test");
// 注册BroadcastReceiver
registerReceiver(myBroadCastReceiver2, filter);
}
class MyBroadCastReceiver2 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// a=intent.getStringExtra("msg_test");
Log.i("dachenReceiveNew", intent.getAction() + "\t消息内容是:" + intent.getStringExtra("msg_test"));
}
}
}
这种方式无法在 AndroidManifest中注册 ,名字不对 所以使用:
// 创建IntentFilter
IntentFilter filter = new IntentFilter();
// 指定BroadcastReceiver监听的Action
filter.addAction("BroadCast.test");
// 注册BroadcastReceiver
registerReceiver(myBroadCastReceiver2, filter);
但是必须得启动这个Activity 或是 线程 才会打印出数据
注意点: 注册的方式两种 必须要注册Activity layout中就一个Button
如遇侵权:请尽快联系作者,,谢谢
代码已经上传到Github上:https://github.com/KEYD111/BroadCast.git