思维导图:
静态广播:
当广播发出去的时候 如果接收广播的应用程序已经退出,也能接收广播:
发送者代码:
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); } }