系统广播小案例
来源:互联网 发布:知耻而后勇是什么意思 编辑:程序博客网 时间:2024/05/21 19:22
上一节说到广播的原理、流程等。那在应用中,该怎么去用。系统的广播可以检测到电量变化、网络变化、用户的拨打电话、用户接入电话、检测接收短信。。。
那么我们就开始以案例开始,深入广播的使用
实例:
==一==、检测手机电量
只能是动态注册在Activity中的OnCreate()中注册
receiverPower = new MyReceiverPower(); registerReceiver(receiverPower,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
public class MyReceiverPower extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){ //1、得到当前系统电量 int level=intent.getIntExtra("level",100); //2、得到系统总电量 int total=intent.getIntExtra("scale",100); //3、计算电量比 int currLevel=level*100/total; Toast.makeText(context, "当前电量"+currLevel, Toast.LENGTH_SHORT).show(); } }}
==二==、检测手机网络状态
涉及到网络权限问题,需要在AndroidManifest.xml中添加
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
动态注册
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); receiverPower = new MyReceiverPower(); registerReceiver(receiverPower,new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); }
在广播接收者中
public class MyReceiverPower extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) { ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = manager.getActiveNetworkInfo(); if (info != null) { if (info.isConnected()) { Toast.makeText(context, "网络连接成功", Toast.LENGTH_LONG).show(); } else { Toast.makeText(context, "网络连接异常!!!", Toast.LENGTH_LONG).show(); } } else { Toast.makeText(context, "网络连接异常!!!", Toast.LENGTH_LONG).show(); } }}}
==三==、检测手机来电
一样涉及权限问题
<!--添加检测用户拨打电话的权限--> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
public class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); //获取用户拨打的电话号码 String number = bundle.getString(Intent.EXTRA_PHONE_NUMBER); Log.e("MyReceiver ", "当前拨打的电话号码为: " + number); }}
==四==、检测手机来电状态
添加权限:
<!--添加获取拨入电话的权限--> <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
public class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { //1, 获取电话管理器对象 TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); //2, 获得电话号码 Bundle bundle = intent.getExtras(); String number = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); //3, 获取电话的状态 int state= manager.getCallState(); switch (state) { case TelephonyManager.CALL_STATE_RINGING://响铃 1 Log.e("MyReceiver", "响铃 === " + number); break; case TelephonyManager.CALL_STATE_OFFHOOK://接听 2 Log.e("MyReceiver", "=====接听===="); break; case TelephonyManager.CALL_STATE_IDLE://挂断 0 Log.e("MyReceiver", "=====挂断===="); break; } }}
==五==、手机短信监听
<!--添加检测短信的权限--> <uses-permission android:name="android.permission.RECEIVE_SMS"/>
public class MyReceiver extends BroadcastReceiver{ private String TAG = "MyReceiver"; @Override public void onReceive(Context context, Intent intent) { Object[] pdus = (Object[]) intent.getExtras().get("pdus"); for (Object pdu:pdus) { SmsMessage message = SmsMessage.createFromPdu((byte[]) pdu); //获取短信的发送者 String send = message.getDisplayOriginatingAddress(); //获取短信的内容 String body = message.getMessageBody(); //获取短信的接收时间 long date = message.getTimestampMillis(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = format.format(date); Log.e(TAG, "短信来自于: " + send); Log.e(TAG, "短信内容为: "+ body ); Log.e(TAG, "接收的时间: " + time ); } }}
0 0
- 系统广播小案例
- 广播--案例:拦截有序广播
- java小案例--银行调度系统
- 推荐 : 学习小案例--宿舍管理系统
- Android无序广播案例
- Android广播常用案例
- 有序广播案例实现
- 拦截有序广播案例
- 广播接收者案例
- 案例-----拦截有序广播
- 发送有序广播案例
- 案例---拦截有序广播
- 有序广播案例
- 有序广播案例实现
- 案例--拦截有序广播
- 有序广播案例
- 发送有序广播案例
- 系统广播
- 《Docker……》笔记-9 Docker 安全
- 我们为什么要用fitsSystemWindows?
- LeetCode225—Implement Stack using Queues
- 详述 Java 语言中的 String、StringBuffer 和 StringBuilder 的区别及用法
- SSL 2352_面积_bfs
- 系统广播小案例
- 40. Combination Sum II
- RNN(LSTM)处理文本资料总结
- Sublime Text 中文输入法无法跟随怎么办
- CentOS 安装Mysql教程
- 利用MATLAB绘制Bezier曲线
- 华为软件训练营MOOC-C语言 Week1 学习笔记
- C/C++ static总结
- Jasperreports6.3.1+Jaspersoft studio6.3.1进行报表开发实战教程(二)-报表原理简述