Android BroadcastReceiver实现自定义静态广播和动态广播(黏性广播)

思维导图:


静态广播:


当广播发出去的时候 如果接收广播的应用程序已经退出,也能接收广播:


发送者代码:

 

package com.example.g160628_android_21_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 editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.et_main_EditText);
    }

    public void send(View view){
        //广播内容
        String data=editText.getText().toString();
        Intent intent=new Intent();
        //指定广播内容
        intent.putExtra("data",data);
        intent.setAction("里面放广播名");
        //无序广播
        //sendBroadcast(intent);

        //黏性广播 过时的方法
        sendStickyBroadcast(intent);

    }
}

//新的应用程序(一个新的Module)

//静态

新建一个类:

import android.content.Intent;
import android.util.Log;

/**
 * Created by Administrator on 2017/7/11.
 */

public class MyRecriver01 extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
       String action=intent.getAction();
        if("com.example.g160628_android_21_sender.send".equals(action)){
            String data=intent.getStringExtra("data");
            Log.i("test","接收者1号:  "+data);
        }
    }
}

在该Module里的配置文件中加入代码:

   <!--接收者-->
        <receiver android:name=".MyRecriver01">
            <intent-filter>
                <action android:name="广播名"></action>
            </intent-filter>
        </receiver>
    </application>


新的应用程序(一个新的Module)

//动态广播:当应用程序退出接收不到广播,为补全不足添加另一个广播 黏性广播。

黏性广播:当进入应用程序后就可以接收到广播(黏性广播主只要控制 发送者中的代码:sendStickyBroadcast(intent)(过时的方法)


在发送者代码中的配置文件中添加黏性广播的权限

<!--添加黏性广播权限-->
<uses-permission android:name="android.permission.BROADCAST_STICKY"></uses-permission>


新建一个类:

package com.example.g160628_android_21_receiver02;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
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.example.g160628_android_21_sender.send".equals(action)){
            String data=intent.getStringExtra("data");
            Log.i("test","接收者2号:  "+data);
        }
    }
}

在ActivityMain中是实现代码:

动态广播:

package com.example.g160628_android_21_receiver02;

import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    private MyReceiver02 myReceiver02;
    private IntentFilter intentFilter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myReceiver02 = new MyReceiver02();
        intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.g160628_android_21_sender.send");
    }

    //使用动态接收广播


    @Override
    protected void onResume() {
        super.onResume();
        //注册广播
        registerReceiver(myReceiver02,intentFilter);
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        //注销广播
        unregisterReceiver(myReceiver02);
    }
}










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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值