初识安卓之发送系统广播与广播接受者
发送一个广播的过程:
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void normal(View view){
//创建广播的意图对象,指定广播的动作,也就是只要接收者配置清单里有这个动作的,都能接受
Intent intent=new Intent("com.itheima.action.TEST");
//发送无序广播,发送同时,指定接受者的权限,
//如果接受者没有这个权限,则收不到,权限可以在发送端自定义一个
sendBroadcast(intent,"com.itheima.permission.MYPERMISSION");
//sendBroadcast(intent);
System.out.println("收到么,我发了");
}
//有序广播,权限可以为null,表示所有接受者都可以收到
public void ordered(View view){
Intent intent=new Intent("com.itheima.action.TEST");
//发送动作参数依次为:(intent),(权限值),(定义一个接收者的终结者最后收信息,终结者不用在清单里注册!!即便信息在多个接受者间传递时,一个接收者中断了广播,终结者还是能收到,因为终结者是在线程中创建的,线程每段就可以收),(一个handler它在哪个线程中创建,终结者就在哪个线程中被回调接受最终消息,一般是在activity的主线程中),(一个int值表示数据包编号),(一个字符串表示数据包名字),(一个bundle表示数据包本身)
//需要一个bundle,用来存放结果数据
Bundle bundle=new Bundle();
bundle.putString("name", "小吕");
bundle.putInt("age", 25);
sendOrderedBroadcast(intent, null, null, null, 100, "aaa", bundle);
System.out.println("有序的长的,收到么,我发了");
}
}
发送者清单文件中配置一个权限值
<permission android:name="com.itheima.permission.MYPERMISSION"></permission>
定义一个广播接收者的过程:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
System.out.println("收到广播");
//通过设置接收者receive标签中,过滤器子标签的priority属性值(int类型)
//可以给多个接受者一个优先级,越大的先收到广播,默认人值为0
System.out.println("1得到广播里的结果码"+getResultCode());
System.out.println("1得到广播里的结果名"+getResultData());
//getResultExtras接受一个布尔值,如果写true,则当广播数据包里什么也没有时(bunlde是个null),可以拿到一个map,里面什么也没有
如果写false,当广播数据包里什么也没有时,只能拿到一个null,所以都写true,可以避免空指针异常的出现
System.out.println("1得到广播里的结果数据包"+getResultExtras(true).getString("name")+","+getResultExtras(true).getInt("age"));
//收到广播后,可以对广播内容进行修改,这样优先级低的接收者得到的广播内容就是被改过的了
/* setResultCode(250);
setResultData("bbb");
setResultExtras(new Bundle());*/
//一句话搞定:
Bundle bundle=new Bundle();
bundle.putString("name", "小孙");
bundle.putInt("age",23);
setResult(250, "bbb", bundle);
//abortBroadcast()设置中断广播后,后面的接收者就收不到任何广播了
}
}
广播接收者配置清单中的配置信息:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itheima.myreceiver"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="com.itheima.permission.MYPERMISSION"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<receiver android:name=".MyReceiver">
<intent-filter android:priority="2">
<action android:name="com.itheima.action.TEST"/>
</intent-filter>
</receiver>
</application>
</manifest>