BroadcastReceiver(二)

Vivaldi天线HFSS建模实战:从参数化曲线到辐射优化的完整流程 本文详细介绍了Vivaldi天线在HFSS中的建模与优化全流程,涵盖参数化曲线绘制、馈电系统设计及性能验证等关键步骤。通过实战案例分享,帮助工程师掌握超宽带天线的HFSS建模技巧,提升雷达探测和通信系统设计效率。重点解析了指数渐变曲线建模、微带馈电优化等核心技术要点。 阅读详情

四、接收系统广播:

1 短信拦截

public class ShortMessageReceiver extends BroadcastReceiver{

  

   @Override

   public void onReceive(Contextcontext, Intent intent) {

     // TODO Auto-generated method stub

     System.out.println("receiver message");

    

     //接受Intent对象当中的数据

     Bundlebundle = intent.getExtras();

     if(bundle !=null)

     {

        //在Bundle对象当中有一个属性名为pdus,这个属性的值是一个Object数组

        Object[]myOBJpdus = (Object[]) bundle.get("pdus");

        //创建一个SmsMessage类型的数组

         SmsMessage[] messages = newSmsMessage[myOBJpdus.length]; 

         System.out.println(messages.length);

         for (int i = 0;i<myOBJpdus.length; i++)

         { 

            //使用Object数组当中的对象创建SmsMessage对象

            messages[i] = SmsMessage.createFromPdu((byte[])myOBJpdus[i]); 

            //获得放送短信的电话号码

            String str = "手机号:" + messages[i].getOriginatingAddress() +"\n";

            //获取短信的内容

            str += messages[i].getDisplayMessageBody();

            Toast.makeText(context, str, Toast.LENGTH_LONG);

         }

     }

   }

}

注册广播接收器:

<receiverandroid:name="ShortMessageReceiver">

        <intent-filter>

          <actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/>

        </intent-filter>

     </receiver>

添加接收短信的权限:

<uses-permission android:name=”android.permission.RECEIVE_SMS”/>

 

2 来去电拦截

来去电的广播动作如下:

来电:android.intent.action.PHONE_STATE

去电:android.intent.action.NEW_OUTGOING_CALL

来电可分解为3个状态:未接电话时的响铃、接听电话和挂断电话

接收来电广播的接收器代码如下:

public class InCallReceiver extends BroadcastReceiver

{

   private static Object obj;

   //显示永不关闭的Toast信息框

   public static void showToast(Contextcontext, String msg)

   {

     Toasttoast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);

     toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);

     try

     {

        Fieldfield = toast.getClass().getDeclaredField("mTN");

        field.setAccessible(true);

        obj = field.get(toast);

        Methodmethod = obj.getClass().getDeclaredMethod("show",null);

        method.invoke(obj,null);

     }

     catch (Exception e)

     {

     }

 

   }

   //关闭Toast信息框

   public static void closeToast()

   {

     if (obj !=null)

     {

        try

        {

 

          Methodmethod = obj.getClass().getDeclaredMethod("hide",null);

          method.invoke(obj,null);

        }

        catch (Exception e)

        {

        }

 

     }

   }

 

   @Override

   public void onReceive(final Context context,final Intent intent)

   {

 

     TelephonyManager tm = (TelephonyManager) context

          .getSystemService(Service.TELEPHONY_SERVICE);

 

     switch (tm.getCallState())

     {

        case TelephonyManager.CALL_STATE_RINGING:

          //获得来电号码

          String incomingNumber = intent

               .getStringExtra("incoming_number");

          showToast(context,incomingNumber);

          break;

        case TelephonyManager.CALL_STATE_OFFHOOK:

          Log.d("call_state","offhook");

          break;

 

        case TelephonyManager.CALL_STATE_IDLE:

          closeToast();

 

     }

 

   }

}

注册广播接收器:

<receiverandroid:name="InCallReceiver">

        <intent-filter>

          <actionandroid:name="android.intent.action.PHONE_STATE"/>

        </intent-filter>

     </receiver>

添加监听来电状态的权限:

<uses-permission android:name=”android.permission.READ_PHONE_STATE”/>

 

接收去电广播的接收器代码如下:

public class OutCallReceiver extends BroadcastReceiver

{

 

   @Override

   public void onReceive(Contextcontext, Intent intent)

   {

     //获得去电号码

     StringoutcomingNumber = intent

          .getStringExtra(Intent.EXTRA_PHONE_NUMBER);

     InCallReceiver.showToast(context,outcomingNumber);

   }

 

}

注册广播接收器:

<receiverandroid:name="OutCallReceiver">

        <intent-filter>

          <actionandroid:name="android.intent.action.NEW_OUTGOING_CALL"/>

        </intent-filter>

     </receiver>

添加权限:

<uses-permission android:name=”android.permission.READ_PHONE_STATE”/>

<uses-permission android:name=”android.permission.PROCESS_OUTGOING_CALLS”/>

 

3 截获屏幕休眠与唤醒

休眠状态:Intent.ACTION_SCREEN_ON

唤醒状态:Intent.ACTION_SCREEN_OFF

public class ScreenOnOffReceiver extends BroadcastReceiver{

  

   @Override

   public void onReceive(Contextcontext, Intent intent) {

     //接收屏幕唤醒状态的广播

     if(Intent.ACTION_SCREEN_ON.equals(intent.getAction()))

        Log.d("screen","on");

     //接收屏幕休眠状态的广播

     else if(Intent.ACTION_SCREEN_OFF.equals(intent.getAction()))

        Log.d("screen","off");

  

   }

}

屏幕唤醒和休眠的广播只能在代码中注册,如果在AndroidManifest.xml中注册将不起作用。

screenOnOffReceiver =new ScreenOnOffReceiver();

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_SCREEN_ON);

filter.addAction(Intent.ACTION_SCREEN_OFF);

registerReceiver(screenOnOffReceiver,filter);

 

4 开机自动运行

public class StartupReceiver extends BroadcastReceiver{

  

   @Override

   public void onReceive(Contextcontext, Intent intent) {

     IntentmainIntent = new Intent(context,BroadcastReceiverTest.class);

     //在广播接收器中显示Activity要设置FLAG_ACTIVITY_NEW_TASK标志

     mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

     context.startActivity(mainIntent);

   }

}

<receiverandroid:name="StartupReceiver">

        <intent-filter>

          <actionandroid:name="android.intent.action.BOOT_COMPLETED"/>

        </intent-filter>

     </receiver>

这样开机后就会自动运行BroadcastReceiverTest这个Activity。

 

5 显示手机电池的当前电量

public class BatteryChangedReceiver extends BroadcastReceiver{

  

   @Override

   public void onReceive(Contextcontext, Intent intent)

   {

     if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction()))

     {

        //当前剩余电量的值

        int level =intent.getIntExtra("level", 0);

        //电量的总刻度点击打开链接

        int scale =intent.getIntExtra("scale", 100);

        Toast.makeText(context,"电池剩余电量:" + (level * 100 / scale) +"%",Toast.LENGTH_LONG).show();

     }

   }

}

batteryChangedReceiver = new BatteryChangedReceiver();

IntentFilter filter = newIntentFilter(Intent.ACTION_BATTERY_CHANGED);

registerReceiver(batteryChangedReceiver,filter);

 

五、验证广播接收器是否注册

//获得PackageManager对象

PackageManager packageManager =getPackageManager();

//指定要查询广播的动作

Intent intent = new Intent("android.provider.Telephony.SMS_RECEIVED");

//返回以查询到的广播接收器集合,如果没有符合条件的广播,List对象的长度为0

List<ResolveInfo> resolveInfos =packageManager

.queryBroadcastReceivers(intent,PackageManager.GET_INTENT_FILTERS);

String s = "";

//显示查询到的广播接收器的信息

for (ResolveInfo resolveInfo : resolveInfos)

{

s += String.valueOf(resolveInfo.toString())+ "\n\n";

}

Toast.makeText(BroadcastReceiverTest.this,"已发现" + resolveInfos.size() +"个接收短信广播的接收器."+"\n接收器的信息分别为:"+s,Toast.LENGTH_LONG).show();

 

拓展:查询Activity Action是否存在

PackageManager packageManager =getPackageManager();

Intent intent = new Intent("com.android.phone");

List<ResolveInfo> resolveInfos =packageManager

  .queryIntentActivities(intent,PackageManager.GET_INTENT_FILTERS);         

String s = "";

for (ResolveInfo resolveInfo : resolveInfos)

{

s += String.valueOf(resolveInfo.toString())+ "\n\n";

}

Toast.makeText(BroadcastReceiverTest.this,"已发现" + resolveInfos.size() +"个Activity."+"\nActivity的信息分别为:"+s,Toast.LENGTH_LONG).show();


源码下载:http://download.youkuaiyun.com/detail/codingbuddy/5103811

YOLOv8改进策略【独家融合改进】| StarNet + 小目标检测头,加强跨尺度的上下文特征融合,提高小目标检测能力 P3/8 - small检测头原始模型中的P3/8特征层对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。适合检测尺寸大概在8x8到32x32像素左右的目标。P4/16 - medium检测头这个检测头对应的P4/16特征层经过了更多的下采样操作,相比P3/8特征图空间分辨率降低,但通道数增加,特征更抽象且有语义信息。它主要用于检测中等大小的目标,尺寸范围大概在32x32到64x64像素左右。P5/32 - large检测头P5/32。 阅读详情

相关推荐

Creo报错代码-9?手把手教你重新生成许可证文件(基于Creo 10.0)

本文详细解析Creo报错代码-9的成因及解决方案,重点介绍如何重新生成许可证文件以应对网络环境变化导致的验证失败。通过分步指南和高级技巧,帮助用户有效管理多网络环境下的Creo许可证问题,提升工作效率。

weixin_30839881的博客 565

判断广播是否已注册

在做Android项目时,有时候需要知道某个BroadcastReceiver是否已经注册,从而决定是发送广播让Receiver处理,还是通过其他方式处理。 那么,如何判断某个广播接收者BroadcReceiver是否已经注册了呢? PackageManager 类中提供了 List queryBroadcastReceivers(Intent intent, int

wangsf1112的专栏 2万+

Ubuntu 20.04 系统备份和还原

最近大家Ubuntu开发环境,经常出现搭着搭着系统就挂了,于是开始琢磨了Ubuntu系统的备份和还原,以备不时之需,Linux环境搭建实在是有点太细,好多情况下,就算曾经搭建过一遍,再次搭建有些包还是忘了安装,做好备份是十分必要的。 经过了一番研究,Ubuntu备份有很多方式:根目录tar、dd、Systemback(1.0版本已经不维护了,2.0版本收费)等等,最终决定使用 —— Timesift, 因为方便一些。 文章参考:小马虎的救星——Timeshift Timeshift Timeshift,是L

Z_Paper的博客 2万+

queryBroadcastReceivers

eg查找开机启动的组件 List list = this     .getPackageManager()     .queryBroadcastReceivers(       new Intent("android.intent.action.BOOT_COMPLETED"),       0);

天天好心情 8457

Claude Code教程(二) | Claude Code 核心信息与使用指南

Claude Code 核心信息与使用指南

qq_20236937的博客 2186

Cadence 17.2配置CIS数据库报错?手把手解决ODBC驱动位数不匹配问题

本文详细解析了Cadence 17.2配置CIS数据库时常见的ODBC驱动位数不匹配问题,提供了从系统环境检查到分步解决方案的完整指南。重点解决32位应用程序与64位ODBC驱动之间的架构冲突,包含驱动安装、DSN配置及高级排查技巧,帮助电子工程师快速恢复设计环境。

play7的博客 971

突破Android O广播限制

Android O对隐式广播进行了限制, 其限制链接说明: https://developer.android.com/about/versions/oreo/background 如果应用注册为接收广播,则在每次发送广播时,应用的接收器都会消耗资源。 如果多个应用注册为接收基于系统事件的广播,这会引发问题;触发广播的系统事件会导致所有应用快速地连续消耗资源,从而降低用户体验。 为了缓解这一问题,...

一个小菜鸟的成长之路的专栏 1127

[官方培训]07-UE材质基础 孙丹璐 Epic 笔记

勾选允许自定义深度写入再在模型上勾选然后可以通过Scene Texture节点拿到渲染的自定义深度信息,有了自定义深度信息就可以与当前渲染的像素深度进行对比,自定义深度信息存放的是最靠近我们的深度,如果当前像素离自定义深度比较远我们就不要这个像素。效果如下这种方案的缺点也很明显,因为这样看不到第二层的透明了,如果是两层的半透明的裙摆,这样就看不到第二层的裙摆了。对于半透明排序问题最根本能解决的还是光线追踪,ue5中又加入了OIT(基于像素的排序)。官方透明材质的理解和应用。

Tcohneyn的博客 1562

Android进阶笔记-4. BroadcastReceiver的注册、发送和接收

关于BroadcastReceiver BroadcastReceiver(广播接收者)是一个系统全局的监听器,用于监听系统全局的Broadcast广播消息,使用观察者模式,基于消息的发布/订阅事件模型; 广播的分类 普通广播:开发者自身定义intent的广播; 系统广播:Android中内置的多个系统广播,每个广播都有特定的Intent - Filter; 有序广播:发送的广播被广播接收者按照priority属性值大小排序,priority相同的,动态注册的广播优先 //发送有序广播 val in

o118abcdef的博客 1485

Java炫酷烟花③(完整代码)

Java语言实现炫酷烟花动画的完整代码。 下载代码 下载链接:我是一只有趣的兔子,感谢你的喜欢。

AIGC 784

wflow模型hbv

毛管水的处理 😄 快速流的处理 K4是为了产生基流的 找到了令人激动的kenematic模块 😄

m0_46268055的博客 779

Android检测注册的broadcast receiver

Android检测注册的broadcast receiver 检查系统的注册的广播接收器有两个路径 静态注册检测 静态注册的广播接收:getPackageManager().queryBroadcastReceivers() 系统有现成的东西 动态注册检测 动态注册就有点麻烦,我们先看下动态注册系统到底是怎么走的? 动态注册有一下几个方法,最后都是到 //android.app.ContextImpl.class private Intent registerReceiverInternal(Broad

qunimaode的博客 3217

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

深入分析 Android BroadcastReceiver (二)

是 Android 中处理广播消息的重要组件。通过合理使用本地广播、有序广播、粘性广播等高级特性,以及优化注册和处理过程,可以提高应用的性能和安全性。在实际项目中,开发者需要根据具体需求选择合适的广播机制,并遵循最佳实践以确保应用的稳定性和高效性。

结合项目案例,记录点点滴滴,自己回顾,分享他人o__o 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android Service 服务 二 BroadcastReceiver

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一、 Broadcas

dghggij的博客 546

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android广播BroadcastReceiver 二

BroadcastReceiver: 在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。下面将详细的阐述如何发送Broadcast和使用BroadcastReceiver过滤接收的过程: 首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Ac...

123

Android Service 服务(二)—— BroadcastReceiver

一、 BroadcastReceiver简介 BroadcastReceiver,用于异步接收广播Intent,广播Intent是通过调用Context.sendBroadcast()发送、BroadcastReceiver()接收。 广播Intent的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()、Context....

whatsyourname的专栏 88

BroadcastReceiver二 静态注册

一。通过点击Button发送到接收器中 MainActivity Intent intent=new Intent(); intent.setPackage("com.example.send"); intent.setAction("android.intent.action.My_Recv"); ...

朝花夕拾 168

BroadcastReceiver源码解析(二)

广播注册部分见BroadcastReceiver源码解析(一)4,BroadcastReceiver之源码分析 4.1,动态注册过程源码分析在Activity中动态注册广播时,在注册方法之前其实省略了Context,也就是实际上调用的是Context. registerReceiver()。Context是一个抽象类,它是Client端和AMS,WMS等系统服务进行通信的接口,Activity、Se

IZZY 9868

BroadcastReceiver详解(二)

BroadcastReceiver的intentfilte可以隐式控制也可以显示控制 显式 receiver = new BlueToothDeviceReceiver(dialogHandler);IntentFilter intent = new IntentFilter();intent.addAction(BluetoothDevice.ACTION_FOUND);intent

nannannai02的博客 313

BroadcastReceiver详解(二)

BroadCastReceiver简介(末尾有源码) BroadCastReceiver源码位于:framework/base/core/java/android.content.BroadcastReceiver.java 广播接收者(BroadcastReceiver)用于接收广播Intent,广播Intent的发送是通过调用Context.sendBroadca...

weixin_30362083的博客 170

BroadcastReceiver(二)手动注册注销receiver

1.在 manifest.xml中删除 相关receiver的配置标签 2.手动的receiver代码  public class LReceiver extends BroadcastReceiver { //这里为何要用 intent.action. ? public static final String ACTION = "com.example.kfk.lbroa

学习笔记 1483

安卓BroadcastReceiver使用(二)

問渠那得清如許?為有源頭活水來。南宋.朱熹《觀書有感》据说程序员是最爱学习的群体,IT男都知道,这个行业日新月异,必须不断地学习新知识,不断地为自己注入新鲜的血液,才能使自己跟上技术的步伐。今天我们来讲一下Android中BroadcastReceiver的相关知识。BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。在Android系统中...

weixin_39877717的博客 2598

Android BroadcastReceiver广播(二)

什么是 BroadcastReceiver? BroadcastReceiver 作为 Android 四大基础组件之一,可以方便地实现不同基础组件、不同应用程序进程之间的通信,它可以监听全局的广播信息,这些广播信息可以由开发者自行开发的程序发出,也可以由 Android 系统程序发出,BroadcastReceiver 可以监听并接收这些广播信息。 为什么要有 BroadcastReceive...

qq_27494201的博客 385
上一篇: BroadcastReceiver(一)
下一篇: eclipse 更改android workspace和avd的路径,显示行号
codingbuddy
博客等级 码龄14年 4粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值