接收系统广播
来源:互联网 发布:手机淘宝密码修改 编辑:程序博客网 时间:2024/05/20 02:29
1.接受短消息的BroadcastReceiver
public class ShortMessageReceiver extends BroadcastReceiver { public static final String TAG="ShortMessageReceiver"; @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. Bundle bundle = intent.getExtras(); if (bundle != null) { Set<String> keys = bundle.keySet(); //查看收到的广播中包含哪些数据类型 for (String key : keys) { Log.d("key", key); } //获取收到的短信数据,所有的短信数据都需要通过一个名字为pdus的key获取 Object[] objArray = (Object[]) bundle.get("pdus"); //定义封装短信内容的SmsMessage对象数组 SmsMessage[] messages = new SmsMessage[objArray.length]; for (int i = 0; i < objArray.length; i++) { //将短信转换成SmsMessage对象 messages[i] = SmsMessage.createFromPdu((byte[]) objArray[i]); String s = "手机号:" + messages[i].getOriginatingAddress() + "\n"; s += "短信内容:" + messages[i].getDisplayMessageBody(); Toast.makeText(context, s, Toast.LENGTH_LONG).show(); } } }}2.在AndroidManifest.xml中注册
<receiver android:name=".ShortMessageReceiver" android:enabled="true" android:permission="android.permission.RECEIVE_SMS" > <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>3.在AndroidManifest.xml申请权限
<uses-permission android:name="android.permission.RECEIVE_MMS" />4.其他Receiver
(1)接听电话
public class InCallReceiver extends BroadcastReceiver { public InCallReceiver() { } @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. Toast.makeText(context,"接收到广播",Toast.LENGTH_SHORT).show(); TelephonyManager manager=(TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE); switch (manager.getCallState()){ case TelephonyManager.CALL_STATE_RINGING: String number=intent.getStringExtra("incoming_number"); Toast.makeText(context,"来电:"+number,Toast.LENGTH_SHORT).show(); break; case TelephonyManager.CALL_STATE_OFFHOOK: Toast.makeText(context,"offhook",Toast.LENGTH_SHORT).show(); break; case TelephonyManager.CALL_STATE_IDLE: Toast.makeText(context,"挂断电话",Toast.LENGTH_SHORT).show(); break; default: break; } }}
(2)拨出电话
public class OutCallReceiver extends BroadcastReceiver { public OutCallReceiver() { } @Override public void onReceive(Context context, Intent intent) { String number=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); Toast.makeText(context,"去电号码:"+number,Toast.LENGTH_SHORT).show(); }}(3)屏幕点亮和熄灭
public class ScreenOnOffReceiver extends BroadcastReceiver { public ScreenOnOffReceiver() { } @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) { Toast.makeText(context, "Screen On", Toast.LENGTH_SHORT).show(); }else if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())){ Toast.makeText(context,"Screen Off",Toast.LENGTH_SHORT).show(); } }}
(4)开机启动
public class StartUpReceiver extends BroadcastReceiver { public StartUpReceiver() { } @Override public void onReceive(Context context, Intent intent) { Intent intent1=new Intent(context,MainActivity.class); intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent1); }}
(5)电池电量改变
private BroadcastReceiver batteryChangedReceiver=new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())){ int level=intent.getIntExtra("level",0); int scale=intent.getIntExtra("scale",100); textView.setText("当前电量:"+(level*100/scale)+"%"); } } };
在AndroidManifest.xml中注册的代码
<receiver android:name=".OutCallReceiver" android:enabled="true" android:exported="true" > <intent-filter> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver> <receiver android:name=".StartUpReceiver" android:enabled="true" android:exported="true" > <intent-filter android:priority="999" > <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <receiver android:name=".InCallReceiver" android:enabled="true" > <intent-filter> <action android:name="android.intent.action.PHONE.STATE" /> </intent-filter> </receiver>
需在在Java代码中注册
//收到屏幕点亮和熄灭的BroadcastReceiver IntentFilter filter1=new IntentFilter(Intent.ACTION_SCREEN_ON); filter1.addAction(Intent.ACTION_SCREEN_OFF); screenOnOffReceiver=new ScreenOnOffReceiver(); registerReceiver(screenOnOffReceiver,filter1);<pre name="code" class="java"> //收到电池电量改变的BroadcastReceiver registerReceiver(batteryChangedReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
需申请的权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.BATTERY_STATS" />5.动态注册的BroadcastReceiver需要在onDestory()中解除
unregisterReceiver(shortMessageReceiver); unregisterReceiver(screenOnOffReceiver); unregisterReceiver(batteryChangedReceiver); unregisterReceiver(inCallReceiver);
0 0
- android-接收系统广播
- 接收系统广播
- 接收系统广播
- android接收系统广播
- BroadcastReceiver 接收系统短信广播
- 动/静态接收系统广播
- 系统广播详解之接收短信
- Android开发之接收系统广播消息
- Android中BroadcastReceiver接收系统广播
- Android接收不到系统广播的原因
- 经过验证过的接收系统广播
- 接收系统广播监听网络变化
- Android开发之接收系统广播消息
- 第一行代码-5.2 接收系统广播
- Android中接收系统广播消息
- android接收adb发送的系统广播及自定义广播
- Android广播之接收系统广播(一)
- 广播接收
- 细谈之AutoLayout全解
- W3School的SQL测试
- CentOS 7 设置开启默认启用命令行模式而非图形界面
- <LeetCode OJ> 19. Remove Nth Node From End of List
- Ext.js5(表单)的容器(表单load测试数据)(表单填写的数据的保存)(vtype)(combineErrors)(插入())(文本框的布局)(36)
- 接收系统广播
- MBR 之 硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)
- Testing Support Library在Android测试中的使用
- Spark + ansj 对大数据量中文进行分词
- Android Application之onLowMemory与omTrimMemory
- 安卓打包签名之-export aborted because fatal lint errors were found
- 产品策划一:移动App项目研发流程及版本规划
- Description Resource Path Location Type Java compiler level does not match the version of the instal
- 获取当前分辨率及dip值