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