广播
来源:互联网 发布:linux 查看隐藏文件夹 编辑:程序博客网 时间:2024/05/17 02:55
广播是一种广泛运用在应用程序之间传输信息的机制,android中的广播用于监听系统事件或应用程序事件!android中的广播包括普通广播、有序广播以及异步广播(粘性广播)!
广播又有常驻型广播和非常驻型广播,常驻型广播是在xml中进行注册的,当应用程序关闭后,如果有对应的广播发送过来,广播接收器还是能够被激活;非常驻型广播是在代码中进行注册的,当应用程序关闭,广播也就取消了,我们可以在Activity中的onCreate或者onResume方法中注册广播,然后在onDestory或者onPause方法中取消注册广播;
注意:如果是非常驻型广播,应用程序关闭后,必须取消注册广播,否则会抛出异常!!
普通广播的发送
普通广播的发送使用方式:
sendBroadcast(Intent intent):intent表示意图,所有匹配该广播的意图都能收到该广播信息
sendBroadcast(intent, String receiverPermission);intent与上面一样,receiverPermission表示权限,与之匹配权限的广播才能接收到相应的广播,如果为null,表示不经许可的要求!
发送者: MainActivity.java页面
package com.zking.administrator.g160628_android21_sender;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;public class MainActivity extends AppCompatActivity { private EditText et_main_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_main_content = (EditText) findViewById(R.id.et_main_content); } public void send(View view){ //拿到内容 String content=et_main_content.getText().toString(); //发送广播 //两种类型的广播 ——1.有序广播 2.无序广播 Intent intent=new Intent(); //指定广播的名字(不能随便写,它要用包名,点后面的可以随便写) intent.setAction("com.zking.administrator.g160628_android21_sender.hui"); //指定广播内容 intent.putExtra("content",content);// sendBroadcast(intent);//发送无序广播 //发送无序黏性广播 (发送黏性广播必须写权限) //黏性广播:退出程序再打开就能接收到,就跟QQ的离线消息一样,发是可以发,当你一上线就能接收到// sendStickyBroadcast(intent); //发送有序广播 sendOrderedBroadcast(intent,null); }}
AndroidManifest.xml(如果你要使用黏性广播就必须写权限)
<!--黏性广播权限--> <uses-permission android:name="android.permission.BROADCAST_STICKY"></uses-permission>
activity_main.xml页面
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.zking.administrator.g160628_android21_sender.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_main_content" android:hint="请输入要发送的内容"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="发送" android:onClick="send"/></LinearLayout>
接收者1:MainActivity.java页面(这个是使用代码的动态广播注册)
package com.zking.administrator.g160628_android21_receiver01;import android.content.IntentFilter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity { private MyReceiver01 myReceiver01; private IntentFilter intentFilter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myReceiver01 = new MyReceiver01(); intentFilter = new IntentFilter(); intentFilter.addAction("com.zking.administrator.g160628_android21_sender.hui"); //动态优先级在Java代码中设置(有序) intentFilter.setPriority(998); } //都是静态时谁先安装就水先运行,如果有一个是动态有一个是静态的话,动态的优先级要比静态的优先级高 //静态广播退出应用程序依然能接收到内容,动态广播退出应用程序就接收不到 @Override protected void onResume() { super.onResume(); //动态:注册广播 registerReceiver(myReceiver01,intentFilter); } @Override protected void onDestroy() { super.onDestroy(); //取消注册,只要你注册了你就必须取消知注册,不然它会报一个错误说你没有取消注册 unregisterReceiver(myReceiver01); }}
MyReciver01.java页面
package com.zking.administrator.g160628_android21_receiver01;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.util.Log;/** * Created by Administrator on 2017/7/11. */public class MyReceiver01 extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { //获取广播的名字 String action=intent.getAction(); //判断,如果一样就获取广播的内容 if("com.zking.administrator.g160628_android21_sender.hui".equals(action)){ //获取广播内容(无序广播)// String content=intent.getStringExtra("content"); //获取结果(有序广播) Bundle bundle=getResultExtras(true);//是否能够拿到,设置它为true String content=bundle.getString("newContent"); Log.i("test","广播接收者1号"+content); } }}
接收者2:配置页面(这里是在XML中)<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zking.administrator.g160628_android21_receiver02"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!--注册:广播接受者 动态注册:使用Java代码设置 静态注册:在XML文件重配置--> <receiver android:name=".MyReceiver02"> <!--android:priority="有序广播"取值范围在-1000到1000中,取值越大优先级越高--> <intent-filter android:priority="1000"> <action android:name="com.zking.administrator.g160628_android21_sender.hui"></action> </intent-filter> </receiver> </application></manifest>
MyReceiver02.java页面
package com.zking.administrator.g160628_android21_receiver02;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.util.Log;/** * Created by Administrator on 2017/7/11. */public class MyReceiver02 extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { //获取广播的名字 String action=intent.getAction(); //判断,如果一样就获取广播的内容 if("com.zking.administrator.g160628_android21_sender.hui".equals(action)){ //获取广播内容 String content=intent.getStringExtra("content"); Log.i("test","广播接收者2号"+content); //判断,广播的内容是’呵呵‘就不往下传不了,如果不是’呵呵‘就往下传播 if(content.contains("呵呵")){ //不传播 abortBroadcast();//阻止广播继续传播,abortBroadcast必须写在优先级高的里面,如果写在低级的就没什么价值了 } //改变广播的内容 ,设置结果 Bundle bundle=new Bundle(); bundle.putString("newContent",content+",开玩笑的!!!"); setResultExtras(bundle); } }}
阅读全文
0 0
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播:
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- HDU1754 I Hate It
- scrollTop 各浏览器兼容方法
- HTML5元素、属性和格式化
- spring事务详解
- 【甘道夫】Geohash基础应用By Python
- 广播
- JSP 中request、session 与 application 的区别
- 广播
- Centos7.3搭建svn服务端
- PAT B1012.数字分类
- C语言main函数标准格式:int main(int argc, char * argv[]);
- mindmanager的R6025
- IDEA同时打开多个项目
- Android广播之无序静态代码