广播
网上教程很多,不是负责framework开发的,但平时也会接触到,所以自己实现一遍
动态广播、
动态注册的广播受Activity声明周期的影响,Activity消亡,则无法接受到广播
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;//过滤器
private ClickReceiver clickReceiver;
private Button button1;
private Button button2;
public static String action1 = "android.button.click1";
public static String action2 = "android.button.click2";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction(action1);
intentFilter.addAction(action2);
clickReceiver = new ClickReceiver();
registerReceiver(clickReceiver, intentFilter);
button1 = findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(action1);
sendBroadcast(intent);
}
});
button2 = findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(action2);
sendBroadcast(intent);
}
});
}
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(clickReceiver);
}
class ClickReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
if(intent.getAction().equals(action1))
Toast.makeText(context, "Receiver button1 finished",Toast.LENGTH_SHORT).show();
else if(intent.getAction().equals(action2))
Toast.makeText(context, "Receiver button2 finished",Toast.LENGTH_SHORT).show();
}
}
}
静态广播
两者的差异在AndroidManifest.xml,不受Activity生命周期影响,即使进程被杀死,仍然能收到广播
AndroidManifest.xml
<receiver
android:name=".StaticReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.button.click1"/>
</intent-filter>
</receiver>
//发送前指定包名和类名
intent.setComponent(new ComponentName("com.example.javalearn",
"com.example.javalearn.StaticReceiver"));
public class StaticReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Receiver finished",Toast.LENGTH_SHORT).show();
}
}