Android实训案例(六)——四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听
2023-09-14 08:59:39 时间
这个类暂时不需要做什么。最重要的还是注册,作为四大组建,他是需要在清单文件里注册的
uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /
public void onReceive(Context context, Intent intent) { Log.i("CallReceiver", "打电话"); String iphone = getResultData(); Log.i("CallReceiver", "电话号码:" + iphone); //添加IP段 String newPhone = "+86" + iphone; //把修改后的号码放回去 setResultData(newPhone); }
系统受到了一条短信后,也是会发一条广播的,所有我们可以在中间写一个广播接受者去进行我们的操作,这里,我们继续在IP拨号器这个项目中写吧,就不新建项目了,不然等下上传也麻烦
我们新建一个Class——SMSReceiver,重写他的onReceive方法,然后我们先注册
!--定义接收的广播,被Google隐藏的权限操作-- action android:name="android.provider.Telephony.SMS_RECEIVED" / /intent-filter /receiver
public void onReceive(Context context, Intent intent) { System.out.println("收到短信"); //获取短信内容 Bundle bundle = intent.getExtras(); //返回的是一个Object数组 Object[] objects = (Object[]) bundle.get("pdus"); //遍历数组得到短信内容 for (Object object : objects) { //把数组元素转换成短信对象 SmsMessage sms = SmsMessage.createFromPdu((byte[]) object); //获取发件人号码 String toPhone = sms.getOriginatingAddress(); //获取短信内容 String smsContent = sms.getMessageBody(); Log.i("SMSReceiver", "发件人号码:" + toPhone + "短信内容" + smsContent); //判断是否是拦截的号码 if (toPhone.equals("12345678910")) { //拦截广播 abortBroadcast();
这样我们运行之下,你会发现,虽然走到拦截这一步,但是并没有阻止显示在短信收件箱里,这里,我们要注意一个优势,就是广播接收者是有优先级定义的,我们只需要在清单注册根节点的intent-filter标签里定义一个
官方文档是说数值在-1000到1000之间,但是最高支持int的最大值的权限,int最大值是多少?自己去看API
我们在对SD卡进行读写的时候会用到,其实也就是巩固一下对广播的使用,做那种语音助手之类的辅助软件,广播和服务还是很有用的,我们还是定义一个SDReceiver并且在清单文件注册
action android:name="android.intent.action.MEDIA_UNMOUNTABLE" / data android:scheme="file"/ /intent-filter /receiver
Log.i("SDReceiver", "SD卡就绪"); } else if (action.equals(Intent.ACTION_MEDIA_REMOVED)) { Log.i("SDReceiver", "SD卡拔出"); } else if (action.equals(Intent.ACTION_MEDIA_UNMOUNTABLE)) { Log.i("SDReceiver", "SD卡卸载");
只要你一安装,就退出不了了,我们再设置一下开机启动,写一个监听器动的广播罢了,我们新建一个RebootReceiver,先注册吧
public void onReceive(Context context, Intent intent) { Log.i("RebootReceiver", "开机"); //启动 Intent i = new Intent(context, MainActivity.class); //在Activity之外启动需要设置Flags i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i);
我们如果做手机助手或者应用的时候或许可以用得上这玩意,新建一个APPReceiver,然后去注册
if (Intent.ACTION_PACKAGE_ADDED.equals(action)) { Log.i("APPReceiver", "安装" + appName); } else if (Intent.ACTION_PACKAGE_REPLACED.equals(action)) { Log.i("APPReceiver", "更新" + appName); } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) { Log.i("APPReceiver", "卸载" + appName);
//有序广播并且携带数据 sendOrderedBroadcast(intent, null, null, null, 0, "自定义广播内容", null); break;
浅谈Android的流畅性优化——案例分享 学习了前文的归因分析,本篇文章就带大家以实际的案例进行浅要的分析和给出具体的优化策略,具体的案例来自于网络,如有错误,还请指出。
相关文章
- [Android Pro] android 4.4 Android原生权限管理:AppOps
- Android API之android.content.BroadcastReceiver
- android脚步---数字时钟和模拟时钟
- Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!
- Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!
- Android实训案例(一)——计算器的运算逻辑
- Android实现推送方式解决方案
- 《Gradle权威指南》--Android Gradle多项目构建
- 《android开发艺术探索》读书笔记(十一)--Android的线程和线程池
- 【VLC-Android】vlc-android简例
- 抖音、美团等大厂千万级用户的Android架构演进之路——《Android架构开发手册》
- Android音频可视化开发案例说明
- Android Messenger实现进程间通信及其原理
- Android Recycleview的使用
- 09_android入门_採用android-async-http开源项目的GET方式或POST方式实现登陆案例
- Android 官方推荐 : DialogFragment 创建对话框
- Android “Theme.AppCompat.Light”解决方法
- Android相关属性的介绍:android:exported = true
- Linux串口工具ckermit打印android log(九)
- Android studio SweetAlert for Android
- Android的ViewAnimator而它的子类ViewSwitcher-android学习之旅(三十三)
- Android的java的报错提示:Could not find com.android.tools.build:gradle:4.2.2.
- Android 封装JSON工具类+JsonUtil
- Android开发问题集锦(六)--GPS定位包括卫星信息