- 第1章 Android Studio
- 第2章 AndroidManifest.xml
- 第3章 配置文件
- 第4章 UI Layout
- 第5章 Toast
- 第6章 Environment
- 第7章 Schedule 计划任务
- 第8章 Internationalization i18n with Android 国际化
- 第9章 存储
- 第10章 相机与相册
- 第11章 麦克风与录音
- 第12章 多媒体开发
- 第13章 定位
- 第14章 电话
- 第15章 消息广播
- 第16章 Service
- 第17章 NFC Near field communication
- 第18章 OkHttp - An HTTP HTTP/2 client for Android and Java applications
- 第19章 EventBus
- 第20章 设计模式
- 第21章 java.net 介绍和使用
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
第15章 消息广播
15.1. 动态注册
package cn.netkiller.broadcast; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private MyBroadcastReceiver myBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter(); //为过滤器添加处理规则 intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); myBroadcastReceiver = new MyBroadcastReceiver(); //注册广播接收器 registerReceiver(myBroadcastReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); //注销动态的广播接收器 unregisterReceiver(myBroadcastReceiver); } //自定义内部类,继承 BroadcastReceiver public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "网络状态已改变", Toast.LENGTH_SHORT).show(); } } }
现在尝试改变网络状态,例如开启或关闭飞行模式,程序会弹出 "网络状态已改变"。
我的测试环境是 Android 9 Pie 没有加入下面的权限仍然能工作
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
优化程序
package cn.netkiller.broadcast; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.BatteryManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private MyBroadcastReceiver myBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter(); //为过滤器添加处理规则 intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); intentFilter.addAction(Intent.ACTION_BATTERY_LOW); myBroadcastReceiver = new MyBroadcastReceiver(); //注册广播接收器 registerReceiver(myBroadcastReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); //注销动态的广播接收器 unregisterReceiver(myBroadcastReceiver); } //自定义内部类,继承 BroadcastReceiver public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); //判断是否联网 if (networkInfo != null && networkInfo.isConnected()) { Toast.makeText(context, "网络已连接", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "网络不可用", Toast.LENGTH_SHORT).show(); } int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; if (isCharging) { Toast.makeText(context, "正在充电", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "电池已经充满", Toast.LENGTH_SHORT).show(); } int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; if (usbCharge) { Toast.makeText(context, "USB 充电", Toast.LENGTH_SHORT).show(); } } } }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论