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

来源:互联网 发布:mkv播放器 for mac 编辑:程序博客网 时间:2024/06/04 19:30

思维导图:


静态广播:


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


发送者代码:

 

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