Android系列之自定义有序广播

来源:互联网 发布:零售软件排名 编辑:程序博客网 时间:2024/06/07 15:27

有序广播最主要的优先级,优先级高的先收到,优先级低的后收到,在这里我就不写两个接收者比较了,大家可以自己多写一个去比较看看,在代码里面我会顺便多给大家多讲一些小知识,所以,请认真看哦,我写在注释里面的了,其余的话不多说,直接粗暴直爽的上代码吧!


发送者的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"    tools:context="com.zking.laci.android21_broadcast.MainActivity"    android:orientation="vertical"    >    <EditText        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/et_broadcast_main"        />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="发送"        android:onClick="send"        /></LinearLayout>

发送者的java类:

package com.zking.laci.android21_broadcast;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_broadcast_main;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        et_broadcast_main = (EditText) findViewById(R.id.et_broadcast_main);    }    public void send(View view){        String content=et_broadcast_main.getText().toString();        Intent i=new Intent();        //设置广播的名字        i.setAction("com.zking.laci.android21_broadcast.FM90.5");        //设置广播内容        i.putExtra("content",content);        //有序广播        sendOrderedBroadcast(i,null);    }}

接收者必须要重新创一个项目才可以哟。

接收者的xml不用去动,因为我们是Log去打印测试的,我们使用的动态广播,所以之前在AndroidManifest.xml写的代码就不能用了,所以直接去有activitie相对应的类写代码:

package com.zking.laci.android21_reveice02;import android.content.Intent;import android.content.IntentFilter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity {    private MyReceive02 myReceive02;    private IntentFilter intentFilter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        myReceive02 = new MyReceive02();        intentFilter = new IntentFilter();        //设置相对应的广播名字        intentFilter.addAction("com.zking.laci.android21_broadcast.FM90.5");        //设置优先值  不同的优先值 不同的接收时间上的差距效果 优先值最大的最快收到 优先值-1000到1000        intentFilter.setPriority(1000);    }    /**     * 动态     */    @Override    protected void onResume() {        super.onResume();        //注册广播        //必须取消注册        registerReceiver(myReceive02,intentFilter);    }    @Override    protected void onDestroy() {        super.onDestroy();        //动态广播必须销毁        unregisterReceiver(myReceive02);    }}

然后我们再去新创个接收者的类:

package com.zking.laci.android21_reveice02;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.util.Log;/** * Created by Laci on 2017/7/11. */public class MyReceive02 extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        //收消息        //得到广播的名字        String name=intent.getAction();        if(name.equals("com.zking.laci.android21_broadcast.FM90.5")){            //得到广播的内容            String content=intent.getStringExtra("content");            Log.i("test","我是1号接收者"+content);            /**             * 怎么给下一个接受者改变广播的内容             */            Bundle bundle=new Bundle();            bundle.putString("newcontent","No"+content);            setResultExtras(bundle);            /**             * 下一个接受者就不可以仅仅是intent.getStringExtra("content");             * 去获得内容了,新的写法是:             * 1.确定收消息             * Bundle bundle=getResultExtras(true);             * 2.根据bundle的键去获得内容就可以了             * String content=bundle.getString("newcontent");             */            /**             * 阻止广播传播,大家可以试试(例如我等会下一个博客要讲的模仿短信黑名单的效果)             */            //abortBroadcast();        }    }}

之后自己多写几个接收者去测试就可以看到明显的效果了!







原创粉丝点击