android之自定义有序广播

自定义有序广播的demo具有优先级,可以修改广播内容

1.优先级高的可以拦截传播内容(即终止在此优先级的接受者)

2.优先级高的还可以修改广播的内容后,再传播给低优先级的。

新建一个项目(Android0711Sender)广播发送者:

java代码如下:

package com.example.cookie.android0713sender;

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();
        //指定广播的名字
        Intent intent=new Intent();
        intent.setAction("com.example.cookie.android0713sender.cookie");
        //指定广播的内容
        intent.putExtra("content",content);
        //发送无序广播
       // sendBroadcast(intent);
        //发送有序广播
        sendOrderedBroadcast(intent,null);

    }
}

2.新建两个接受者项目

package com.example.cookie.myreceiver01;

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/13 0013.
 */

public class MyReceiver01 extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //获取广播名字
        String action=intent.getAction();
        if ("com.example.cookie.android0713sender.cookie".equals(action)){
            //获取广播内容
//            String content=intent.getStringExtra("content");
            //获取结果
            Bundle bundle=getResultExtras(true);
            String content=bundle.getString("newContent");
            Log.i("test","1号广播接收者接收的到内容为:"+content);

        }
    }
}

2号接收者

package com.example.cookie.myreceiver02;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.util.Log;

/**
 * Created by Administrator on 2017/7/13 0013.
 */

public class MyReceiver02 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action=intent.getAction();
        if ("com.example.cookie.android0713sender.cookie".equals(action)){
            String content=intent.getStringExtra("content");
            Log.i("test","2号广播者接收到的信息为:"+content);
            //判断
            if (content.contains("免费")){
                //不传播
                abortBroadcast();
            }

            //改变广播的内容
            //设置结果
            Bundle bundle=new Bundle();
            bundle.putString("newContent",content+",开玩笑的,嘻嘻嘻");
            setResultExtras(bundle);
        }
    }
}

3.有序广播还可以设置他们的优先级(范围1000至-1000)

静态设置优先级的关键代码priority

<receiver android:name=".MyReceiver02">
            <intent-filter android:priority="400">
                <action android:name="com.example.cookie.android0713sender.cookie"></action>

            </intent-filter>

动态设置优先级代码setPriority

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myReceiver01 = new MyReceiver01();
        intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.cookie.android0713sender.cookie");
        intentFilter.setPriority(200);
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值