- 博客(57)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
原创 Kotlin类与对象
在其他语言中,比如Java中null是一个非常常见的值,因为在某些情况下,引用类型的变量默认值就是null,这就经常会导致程序中出现一些空指针导致的异常,在Kotlin中,对于空值处理是非常严格的,正常情况下,我们的变量是不能直接复制为null的,否则会报错。那么,如果我们希望某个变量在初始化的情况下使用null而不去引用某一个具体对象,该怎么做呢,此时我们需要将变量的类型修改为可空类型,只需要在类型名称的后面添加一个?1.如果str为null,那么这里得到的结果就是null,并且不会正常执行后面的操作。
2024-11-03 21:32:30
1082
原创 Kotlin函数由易到难
对于函数递归来说,这种方式效率低下,所以使用关键字 tailrec来优化上面的求和的函数,其原理是使用了while循环。对于变量的获取和设定,本质上都是通过其getter和setter函数来完成的,只不过默认情况下不需要我们去编写。内联函数在编译的时候会把函数里面的内容直接放到调用的地方,可以查看编译后的class文件。不过这样写还不够简洁,在Kotlin中,如果函数的最后一个形参是一个函数类型。注意:函数的形式参数默认情况下为常量,无法进行修改,如下截图。这是为了后续多态的一些性质而设计的。
2024-11-03 13:24:49
444
2
原创 Telephony中ITelephony的AIDL调用关系
看完小插曲,回到PhoneInterfaceManager类的学习,通过查看这个所在路径packages/services/Telephony/src/com/android/phone/PhoneInterfaceManager.java,发现它是运行在phone进程下的,它是PhoneGlobals在onCreate方法中初始化的 phoneMgr = PhoneInterfaceManager.init(this),并且这个只能初始化一次。方法也移除了,普通应用不再能够直接更改这些设置。
2024-10-27 16:56:10
869
原创 Android 内存优化——常见内存泄露及优化方案
熟悉Handler消息机制的都知道,mHandler会作为成员变量保存在发送的消息msg中,即msg持有mHandler的引用,而mHandler是Activity的非静态内部类实例,即mHandler持有Activity的引用,那么我们就可以理解为msg间接持有Activity的引用。在Android开发中,静态持有很多时候都有可能因为其使用的生命周期不一致而导致内存泄漏,所以我们再新建静态持有的变量的时候需要多考虑一下各个成员之间的引用关系,并且尽量少地使用静态持有的变量,以避免发生内存泄漏。
2024-10-20 14:34:48
1487
原创 设备静置情况下getCurrentCalls方法为何一直打印?
我们从一开始就分析,到目前为止排除了了8个方法了,还剩一个handleRadioNotAvailable()方法,而我们一直分析的handleMessage()中EVENT_REPOLL_AFTER_DELAY事件,只不过是一个触发重复轮询的一个事件,起到了一个定时器的作用,它并不是引起轮询Call的起始原因。可以先排除方法dialGsm(),dialCdma(),cleanupCalls(),因为这些是打电话事件操作,接下来重点看一下其他方法。
2024-10-16 22:10:17
752
1
原创 Java集合框架(三)---Map
将每一个字母作为键去查Map集合,如果返回为null,将将该字母和1存入到Map集合中,如果返回不是null,说明该字母在Map集合已经存在并有对应次数,那么就获取该次数并进行自增,然后将该字母和自增后的次数存入到Map集合中,覆盖原来键对应的值。Set
2024-08-25 14:18:13
941
原创 Java集合框架(三)---泛型
泛型类定义的泛型,在整个类中有效,如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了,为了让不同方法可以操作不同的对象,而且类型还不确定,那么可以将泛型定义在方法上。什么时候定义泛型类?当类中要操作的引用类型不确定的时候,早期定义Object来完成,使用Object要进行强转,而现在定义泛型来完成扩展。super E :可以接收E类型或者E类型的父类型,下限。extends E:可以接收E类型或者E的子类型,上限。extends E:可以接收E类型或者E的子类型,上限。
2024-08-17 22:20:06
199
原创 Java集合框架(二)---Set
真的上面的HashCode进行优化,可以减少判断的次数,没有必要写死,可以通过元素自身来定义Hash值,*39的目的是为了避免元素的Hash值相等,提高Hash值的唯一性,效率高。我们再往Treeset存对象的时候,它会帮忙排序,但是Person不具备比较性,所以我们需要让Person具备比较性,需要实现Comparable接口。因为它比较的是每个对象的Hash值,每个对象的Hash值是不一样的,所以会存入相同的元素。当元素自身不具备比较性,或者具备的比较性不是所需要的,这是需要让容器自身具备比较性。
2024-08-17 18:32:26
306
原创 Java集合框架(一)---List
List集合特有的迭代器,ListIterator是Iterator的子接口,在迭代时,不可以通过对象的方法操作集合中元素,因为会发生ConcurrentModificationException并发异常。面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。所以在迭代时,只能用迭代器的方法操作元素,可是Iterator方法是有限的,只能对元素进行判断,取出,删除的操作。集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
2024-08-14 23:02:39
842
原创 通过进程找响应的文件
当知道这个进程的pid之后可以找到相关的系统文件,如下搜索,可以看到telephony-common.jar也属于phone进程。如何知道进程的UID,也可以通过UID进程搜索相关的进程,可以看到很多相关的radio进程。ps -ef | grep “SystemApp” 查找到我们 App 对于的 pid。搜索phone的相关进程,可以看到有一个UID为radio,pid为2034的相关进程。需要进入adb shell。
2024-07-23 21:24:06
331
原创 Java多线程创建及同步锁的理解
多线程顾名思义就是多个线程在程序中运行,就比如我们的虚拟机JVM,启动的时候不止启动一个线程,至少有一个是负责Java程序的执行还有一个是垃圾回收机制GC的线程。一个进程中至少有一个线程。
2024-07-21 16:27:39
1068
1
原创 Microsoft Edge浏览器设置之后就很牛逼了
可以使你的浏览器变得更加实用和方便,让你可以准确搜索,并且可以去除一些广告垃圾,也可以免除你登录之后才可下载,总之巨实用
2024-04-06 21:41:52
461
转载 (转载)5G NR 逻辑信道、传输信道和物理信道
原文链接:https://www.jianshu.com/p/d9108f3d0911无线接口可分为三个协议层:物理层(L1)、数据链路层(L2)和网络层(L3)。L1:主要用于为高层业务提供传输的无线物理通道。L2:包括四个子层MAC(Medium Access Control)媒体接入控制RLC(Radio Link Control)无线链路控制PDCP(Packet Data Convergence Protocol)分组数据汇聚协议SDAP(Service Data Adaptatio
2021-12-01 18:04:36
3324
原创 SIM不识卡简单分析流程
SIM卡检卡是在modem 侧完成的。modem在初始化时会去做SIM卡的初始化,包括检卡动作。1>先给SIM卡上电(会先上1.8v,如果检卡失败会切换到3.0v);2>SIM controller拉动RST PIN;3>SIM 卡收到controller的RST后回复一串字符串,称为ATR(answer to reset),ATR里面包含了一些卡的信息;4>SIM driver收到卡回的ATR后就可以跟卡进行通信了SIM卡不识卡最常见的原因是硬件接触不好导致的。1,可在
2021-11-16 14:26:34
2195
原创 Android 接口的使用
解决“多重继承”的问题,可以实现多个接口//发送消息DeskClock.setCallBack(mAlarmCount);private DeskClock.AlarmCount mAlarmCount=new DeskClock.AlarmCount() { @Override public int getAlarmCount() { if(mItemAdapter != null){ final int
2020-09-29 16:03:06
532
原创 监听WFC_IMS_ENABLED的开关
1.注册private MagnificationObserver magnificationObserver;magnificationObserver = new MagnificationObserver(mHandler); getActivity().getContentResolver().registerContentObserver(Settings.Glob...
2020-03-11 13:13:49
535
原创 监听WIFI连接状态
1.注册 final IntentFilter WifiFilter = new IntentFilter(); WifiFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); WifiFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACT...
2020-03-11 11:09:50
1363
原创 刚刷完机,蓝牙打不开
先要了解机器的启动流程:机器启动SystemServer进程会启动BluetoothService,在BluetoothService里会拉起BluetoothManagerService BluetoothManagerService在蓝牙打开时会去绑定AdapterService(蓝牙服务APK),绑定成功的话AMS针对mConnection会执行回调函数即 onServiceCon...
2020-03-06 09:27:22
1506
原创 在源码创建自定义dialog
第一中方法:private void showDialog(){ Context context = getActivity();//不是在activity类中写的,所以需要获取context对象 View view = LayoutInflater.from(context).inflate(R.layout.high_opinion_dialog_layout,nul...
2020-02-28 10:25:14
233
原创 预置联系人
alps/device/mediatek/common/device.mk alps/vendor/mediatek/proprietary/packages/apps/Contacts/SimProcessor/src/com/mediatek/simprocessor/BootCmpReceiver.java alps/vendor/mediatek/proprietary/pac...
2020-01-20 14:21:06
470
原创 networkIssue
SFR:1、Software #5892【客户反馈】[SFR][ONEIDA][Bearer 4G] Info Trans Flag is set to 1 in PDN Connectivity RequestDescriptionESM info trans flag should be set to 0.Steps to reproduce :Switch on the UE....
2020-01-19 10:46:44
1977
3
原创 MMICode
39Go前言本技术规范是由第三代合作伙伴计划(3GPP)制定的Foreword This Technical Specification has been produced by the 3rd Generation Partnership Project (3GPP)什么是mmi(Man-Machine-Interface):从功能上来看,有一些从拨号盘拨出去的字符串,它的实际作用不是建...
2020-01-19 10:33:28
941
原创 修改MODEL,BRAND编译不开机
前提:新项目如果修改SAGEREAL_MODEL_NAME = UNONU%space%X4GSAGEREAL_BRAND_NAME = UNONU编译之后出现无法开机,并且出现以下异常,就说明是tee的问题。解决方法:就是更新瓶钵tee证书,上传,然后再去修改,就不会出现问题。报错信息:01-04 00:07:39.602 1180 1180 E AndroidRuntime:...
2020-01-03 10:50:15
668
原创 android原生编译指令
AOSP编译指令:source build/envsetup.shlunch57. full_k39tv1_bsp_512-eng58. full_k39tv1_bsp_512-user59. full_k39tv1_bsp_512-userdebugnew/remake:make -j8 2>&1 | tee newbuild.logotapackage:make...
2019-12-19 18:18:54
450
原创 查看某个apk中shared_prefs的值
Oneida Lite:/data/data/com.android.mms/shared_prefsOneida Lite:/data/data/com.android.mms/shared_prefs # cat com.android.mms_preferences.xml<?xml version='1.0' encoding='utf-8' standalone='yes' ?...
2019-12-10 19:36:00
513
原创 anchoredHeaderString字符
./java/com/android/dialer/contactsfragment/res/layout/fragment_contacts.xml---整体./java/com/android/dialer/contactsfragment/res/layout/add_contact_row.xml ---图标和创建联系人文本./java/com/android/dialer/conta...
2019-12-10 19:06:05
247
原创 apn配置相关问题
1. 客户的要求需要加入此SFR webphone ,SFR option modem apn,但是发现SFR option modem加入没有起到作用,手机上没有显示,刚开始以为是代码端隐藏了它,后来发现不是这样的,可以看下面的代码我们习惯于在手机底部去补充该apn,所以当时这样写上之后,手机上显示不出来,查找原因也查找了很久,最后发现了原来是ACCESS DATA和SFR op...
2019-11-12 19:13:26
837
3
原创 修改的一些基础bug
基于39Go平台修改紧急号码alps/vendor/mediatek/proprietary/external/EccList/ecc_list.xmlCondition: there are following values:- 0: ecc only when no sim- 1: ecc always- 2: MMI will show ecc but send to nw a...
2019-11-02 13:30:07
733
1
原创 连接WIFI Hotspot ,显示wifi地址
连接WIFI热点,显示wifi地址//这里是可以修改hostnamealps/device/mediatek/common/device.mk PRODUCT_PROPERTY_OVERRIDES += net.hostname=MyOSalps/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/mediatek...
2019-10-29 14:19:11
1339
原创 手机中apn数据库的位置
gms@gms-ThinkStation-P300:~$ adb shellOgima:/ # cd data/user_de/0/com.android.providers.telephony/databasesOgima:/data/user_de/0/com.android.providers.telephony/databases # lsHbpcdLookup.db cb.db m...
2019-09-29 16:46:08
1663
转载 如何用git命令生成Patch和打Patch
在程序员的日常开发与合作过程中,对于code的生成patch和打patch(应用patch)成为经常需要做的事情。什么是patch?简单来讲,patch中存储的是你对代码的修改什么是生成patch?生成patch就是记录你对代码的修改并将其保存在patch文件中什么是打patch?打patch就是将patch文件中对代码的修改,应用到源代码,从而把对代码的修改应用到code中。尽管本身L...
2019-09-26 19:39:45
215
原创 下拉状态栏的menu背景的修改
前提条件:39Go的代码,智能功能机(smart feature phone)[售后反馈] 下拉菜单图标对比度弱可以看下面这张图片:首先我们需要知道焦点在哪里通过工具可以看到当类为android.widget.Switch是 focused = trueSwitch 就是打开下拉的菜单的按钮,通过Switch找到QSTileBaseViewpublic QSTileBaseView(C...
2019-09-23 13:53:31
1255
原创 modem端的app文件修改需要单独编译
39GO modem端当修改了CustomUtConfig.cpp (apps\module\utinterface\custom\src)此文件是在modem端的app文件夹中,app需要单独编译,1、先将alps-release-o1.mp1-default_modem_MP\TOOLS中的NDK文件夹拷贝到app文件夹下2、在命令窗口执行:./build.sh clean,build...
2019-09-23 13:39:26
355
原创 日历问题
操作步骤:进入日历界面,左软键–go to top,高亮选中按周、日程查看日程,按上下左右导航键移动时,查看高亮选中显示实际结果:无高亮选中显示,如下图所示。历经千辛万苦,放弃过3次,但是最终解决,还是很开心的,自己总结一下其实这个bug,不是很难,但是找到关键点还是需要耐心,耐心。这里分享一下分析过程。1、由于对代码的不熟悉,和对View了解的不深入,在DayView这个类中疯狂打l...
2019-08-14 15:38:57
299
原创 前摄避免闪烁默认自动
80Go项目如何查看项目使用了哪个Sensor器件,查看sagereal/mk/<project>/ProjectConfig.mkKK项目mediatek/config/<project>/ProjectConfig.mk在ProjectConfig.mk中查找前后摄像头型号: CUSTOM_HAL_SUB_IMGSENSOR = sp250asub_mipi_ra...
2019-08-14 14:45:37
347
转载 linux命令 sed
sed 编辑器是 Linux 系统管理员的工具包中最有用的资产之一,因此,有必要彻底地了解其应用Linux 操作系统最大的一个好处是它带有各种各样的实用工具。存在如此之多不同的实用工具,几乎不可能知道并了解所有这些工具。可以简化关键情况下操作的一个实用 工具是 sed。它是任何管理员的工具包中最强大的工具之一,并且可以证明它自己在关键情况下非常有价值。sed 实用工具是一个“编辑器”,但它与...
2019-06-25 17:16:04
161
原创 meta工具锁网参数解析
先介绍一下Modem META ver 10.1916.0.00工具的简单用法1.先打开工具2.直接用手机连接工具3.如果需要查看工具的NVRAM Editor,先导入Load DB4.在搜索框中找到NVRAM Editor请看下面的截图部分,这是我连接80GO的手机所看到的情况:因为要在工具中对手机进行锁网操作,所以我先找到NVRAM_EF_SML_LID,左边是对应的各个参数,如...
2019-06-15 14:44:16
2390
原创 mtklog如何判断是否有telephony log和开机log
首先从persist property配置来看properties文件里都有没有persist.log.tag.tel_dbg的定义。也可以使用下面的命令adb shell getprop persist.log.tag.tel_dbg,看是否有配置成1配置成1说明已经打开了telephony log最后说一下,如何判断是不是开机log查看mtklog中是不是有 .boot文件,如果有...
2019-06-15 11:00:06
812
2
在android中用jdbc连接数据库出现的问题,求大神帮忙?
2016-05-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人