Android学习-四大组件(BroadcastReceiver)
来源:互联网 发布:java string == equal 编辑:程序博客网 时间:2024/05/01 15:24
今天复习广播接收器
动态注册
先建一个内部类用来处理广播事件
class MyBroadcast extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(MainActivity.this,"收到广播",Toast.LENGTH_SHORT).show(); } }
然后在Activity中新建一个刚才的类的对象和一个IntentFilter对象,往IntentFilter里面添加action用来指定要监听的广播内容,然后对广播进行注册,最后在onDestroy里取消注册
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//监听网络变化 myBroadcast=new MyBroadcast(); registerReceiver(myBroadcast,intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(myBroadcast); }
本地广播
流程基本和动态注册广播一样,不同的是使用LocalBroadcastManager来进行广播的注册与发送
public class MainActivity extends AppCompatActivity { private Button btn; private IntentFilter intentFilter; private LocalBroad localBroad;//自定义的LocalBroad类 private LocalBroadcastManager localBroadcastManager;//本地广播管理器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn=(Button)findViewById(R.id.btn); localBroadcastManager=LocalBroadcastManager.getInstance(this);//实例化本地广播管理器 btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent("com.example.vamo.myapplication2.MY_LOCALBROADCAST"); localBroadcastManager.sendBroadcast(intent); } }); intentFilter=new IntentFilter(); intentFilter.addAction("com.example.vamo.myapplication2.MY_LOCALBROADCAST");//筛选收到的广播 localBroad=new LocalBroad(); localBroadcastManager.registerReceiver(localBroad,intentFilter); } @Override protected void onDestroy() { super.onDestroy(); localBroadcastManager.unregisterReceiver(localBroad); } class LocalBroad extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(MainActivity.this,"本地广播",Toast.LENGTH_SHORT).show(); } }}
注意:
本地广播管理器建立后一定要先实例化才能使用,今天就因为没实例化ANR了
静态注册
还是上面的网络状态,先单独建立一个MyBroadcast
public class MyBroadcast extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"发生变化",Toast.LENGTH_SHORT).show(); }}
然后在AdroidManifest里面注册
<receiver android:name=".MyBroadcast"> <intent-filter> <action `android:name="android.net.conn.CONNECTIVITY_CHANGE"/>` </intent-filter> </receiver>
自定义广播
将上面的广播在AndroidManifest中注册的时候做下修改
android:name="com.example.broadcast.MY_BROADCAST"/>
然后在Activity里面新建一个按钮并设置点击事件用来发送广播
Intent intent=new Intent("com.example.broadcast.MY_BROADCAST"); sendBroadcast(intent);
这样,当点击按钮的时候就会收到广播并执行onReceive里面的操作,如果其他程序里面的广播注册的action也是这个,那么其他程序也可以收到。
发送有序广播
只需要在Activity的按钮事件中将sendBroadcast(intent);改为sendOrderedBroadcast(intent,null);就可以发送有序广播了。
当广播接收器在AndroidManifest中注册的时候在intent-filter后面加一个android:priority属性则可以指定权限,权限越高越先收到广播,收到有序广播后可以在onReceive里面调用abortBroadcast();来截断广播
0 0
- Android学习-四大组件(BroadcastReceiver)
- Android学习之四大组件(四)——BroadcastReceiver
- 【android学习】四大组件-BroadcastReceiver(广播接收者)
- Android学习笔记--四大组件之BroadcastReceiver
- Android 四大组件学习之BroadcastReceiver一
- Android 四大组件学习之BroadcastReceiver二
- Android 四大组件学习之BroadcastReceiver三
- Android 四大组件学习之BroadcastReceiver四
- Android 四大组件学习之 BroadcastReceiver
- Android学习笔记四大组件之BroadcastReceiver
- Android学习之路--四大组件--BroadCastReceiver
- Android四大组件学习之BroadcastReceiver
- Android四大组件----BroadcastReceiver
- Android四大组件-BroadcastReceiver
- Android四大组件-BroadcastReceiver
- Android四大组件----BroadcastReceiver
- android四大组件---BroadCastReceiver
- Android四大组件:BroadcastReceiver
- 暴风某站注入一枚 (可给任意用户发任意短信内容)
- 打印一个九九乘法表
- ScrollView 下嵌套 ListView 或 GridView 冲突显示不全问题
- redission java.lang.NoSuchFieldError: WRITE_BIGDECIMAL_AS_PLAIN
- leetcode笔记--Remove Duplicates from Sorted List II
- Android学习-四大组件(BroadcastReceiver)
- java基础—java的Io操作学习(2)
- 当前日期所在的星期范围
- MPEG-7描述子(2)——可伸缩颜色描述子SCD
- TouchListener PK OnTouchEvent + 多点触碰
- Live2D Web端实现
- 2.Redis学习-list操作
- JSP-page指令学习
- Linux常用命令大全