android9.0 android studio3.4.2 2019/7/29
一,接收系统广播
1,动态注册监听网络变化
创建一个MyReceiver 继承自BroadcastReceiver,并重写onReceive()方法
class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "MyReceiver get it", Toast.LENGTH_SHORT).show();
}
}
在Activity中创建IntentFilter,实例化MyReceiver,并进行动态注册,在onDestory()方法中取消注册
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private MyReceiver myReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
myReceiver = new MyReceiver();
registerReceiver(myReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);
}
class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "MyReceiver get it", Toast.LENGTH_SHORT).show();
}
}
当网络状态发生变化时,MyReceiver会接收到系统发送的广播,并给出提示
2,静态注册,发送自定义标准广播并接收
新建MyReceiver类继承自BroadcastReceiver,重写onReceive()方法
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
Toast.makeText(context, "MyReceiver get it", Toast.LENGTH_SHORT).show();
}
}
在AndroidManifest中添加要响应的action
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.broadcasttest.MyReceiver_ACTION" />
</intent-filter>
</receiver>
在activity中设置intent并发送
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent=new Intent("com.example.broadcasttest.MyReceiver_ACTION");
intent.setComponent(new ComponentName("com.example.broadcasttest","com.example.broadcasttest.MyReceiver"));
//第一个参数为广播接收器所在的包名,第二个参数为广播接收器所在的类名
sendBroadcast(intent);
}
}
发送有序广播
sendOrderedBroadcast(intent,null);
设置优先级
<intent-filter android:priority="100">
<action android:name="com.example.broadcasttest.MyReceiver_ACTION" />
</intent-filter>
拦截有序广播 (Receiver类的onReceive()方法中)
abortBroadcast();
3,发送本地广播
package com.example.broadcasttest;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private LocalBroadcastManager localBroadcastManager;//本地广播管理器
private LocalBroadcastReceiver localBroadcastReceiver;//自定义广播接收器
private IntentFilter intentFilter;//带过滤器的intent
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
localBroadcastManager = LocalBroadcastManager.getInstance(this);//获取本地广播管理器实例
intentFilter = new IntentFilter("com.example.broadcasttest.LocalBroadcastReceiver_ACTION");
//设置带action的intent
localBroadcastReceiver = new LocalBroadcastReceiver();//实例化本地广播接收器
localBroadcastManager.registerReceiver(localBroadcastReceiver,intentFilter);
//使用本地广播管理器动态注册自定义广播接收器为本地广播接收器
localBroadcastManager.sendBroadcast(new Intent("com.example.broadcasttest.LocalBroadcastReceiver_ACTION"));
//使用本地广播管理器发送本地广播
}
class LocalBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "LocalBroadcastReceiver Received", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
localBroadcastManager.unregisterReceiver(localBroadcastReceiver);
//取消注册自定义广播接收器
}
}