初识安卓之发送系统广播与广播接受者

发送一个广播的过程:

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>

原文地址:https://www.cnblogs.com/94007boy/p/2797490.html