Android 使用registerReceiver注册BroadcastReceiver案例详解
BroadcastReceiver是Android中非常重要的组件。我们可以通过registerReceiver()方法来向系统注册我们自己的BroadcastReceiver,以使其接收并处理指定的广播事件。本文将详细讲解Android使用registerReceiver函数注册BroadcastReceiver的方法,并提供两个常见的示例说明。
registerReceiver()
registerReceiver()是Android中一个非常重要的方法,能够让我们动态地向系统注册一个广播接收器,以接收指定的广播事件。其函数原型如下:
public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
在使用该方法时,我们需要传入一个BroadcastReceiver对象和一个IntentFilter对象。BroadcastReceiver对象是由我们自己创建的,用于接收广播事件并处理业务逻辑。IntentFilter对象用于过滤广播事件,使我们只接收感兴趣的广播事件。
一个常见的registerReceiver()函数的使用方法如下:
//1.创建BroadcastReceiver对象
BroadcastReceiver receiver = new MyReceiver();
//2.创建IntentFilter对象
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.BOOT_COMPLETED");
//3.注册广播接收器
registerReceiver(receiver, filter);
如上代码所示,我们创建了一个MyReceiver的BroadcastReceiver对象,并定义一个IntentFilter对象来过滤接收android.intent.action.BOOT_COMPLETED广播事件,最后使用registerReceiver()方法进行注册。
示例一:监听系统时间变化
首先,我们来看一个简单的示例,它可以监听系统时间的变化,当时间变化的时候,我们可以进行相应的UI更新操作。代码如下:
public class TimeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_TIME_TICK)) {
//时间变化时的操作,如进行UI更新
Log.d("TimeReceiver", "Time changed:" + System.currentTimeMillis());
}
}
}
在该BroadcastReceiver中,我们只监听了Action为ACTION_TIME_TICK的广播事件,并且在时间变化的时候进行UI的相应更新。
接下来,我们需要进行registerReceiver()的注册操作,如下:
public class MainActivity extends AppCompatActivity {
private TimeReceiver mTimeReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建BroadcastReceiver对象
mTimeReceiver = new TimeReceiver();
//创建IntentFilter对象,过滤ACTION_TIME_TICK广播事件
IntentFilter filter = new IntentFilter(Intent.ACTION_TIME_TICK);
//注册广播接收器
registerReceiver(mTimeReceiver, filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
//注销广播接收器
unregisterReceiver(mTimeReceiver);
}
}
该示例中,我们在MainActivity中进行了BroadcastReceiver的注册和注销操作,同时。我们在onCreate()方法内,创建了一个TimeReceiver对象,并创建了一个IntentFilter对象过滤ACTION_TIME_TICK广播事件,最后调用了registerReceiver()方法进行注册。
当然,在我们的程序中,我们还需要进行对错误的处理,例如考虑到系统异常,当应用程序异常退出时,需要在onDestroy()方法中进行注销广播接收器,避免出现未知错误。
示例二:监听网络变化
接下来,我们来看一个更为实用的示例,它能够监听网络连接的变化,并在网络连接状态发生变化时,进行相应的UI更新。示例代码如下:
public class NetworkReceiver extends BroadcastReceiver {
private Context mContext;
private TextView mTextView;
public NetworkReceiver(Context context, TextView textView) {
mContext = context;
mTextView = textView;
}
@Override
public void onReceive(Context context, Intent intent) {
//从系统的服务中获取网络连接状态
ConnectivityManager connectivity = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
//获取当前网络信息
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (info != null && info.isConnected()) {
//网络已连接
updateUI("Network connected.");
} else {
//网络未连接
updateUI("Network disconnected.");
}
}
private void updateUI(final String status) {
((Activity) mContext).runOnUiThread(new Runnable() {
@Override
public void run() {
mTextView.setText(status);
}
});
Log.d("NetworkReceiver", status);
}
}
在该BroadcastReceiver中,我们从系统的服务中获取了当前的网络连接情况,并在连接状态发生变化时进行UI更新操作。
接下来,我们需要进行注册操作,如下:
public class MainActivity extends AppCompatActivity {
private NetworkReceiver mNetworkReceiver;
private IntentFilter mIntentFilter;
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.textView);
//创建BroadcastReceiver对象
mNetworkReceiver = new NetworkReceiver(this, mTextView);
//创建IntentFilter对象,过滤CONNECTIVITY_ACTION广播事件
mIntentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
//注册广播接收器
registerReceiver(mNetworkReceiver, mIntentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
//注销广播接收器
unregisterReceiver(mNetworkReceiver);
}
}
在该示例中,我们首先在MainActivity的onCreate()方法中,创建了一个NetworkReceiver对象,并且定义了一个IntentFilter对象用于过滤连接网络的更改事件,最后使用registerReceiver()方法进行注册。
当应用程序关闭时,我们使用注销广播接收器来避免出现未知错误。
至此,我们已经完成了两个在使用registerReceiver函数注册BroadcastReceiver的实例讲解,希望这些实例能够帮助到广大Android开发者。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android 使用registerReceiver注册BroadcastReceiver案例详解 - Python技术站