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

xiaoxiao2021-02-28  85

思维导图:

静态广播:

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

发送者代码:

 

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); } }

转载请注明原文地址: https://www.6miu.com/read-81249.html

最新回复(0)