zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

Android实训案例(六)——四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听

Android案例安装应用组件 基本 卸载 监听
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的流畅性优化——案例分享 学习了前文的归因分析,本篇文章就带大家以实际的案例进行浅要的分析和给出具体的优化策略,具体的案例来自于网络,如有错误,还请指出。