- 博客(248)
- 资源 (23)
- 问答 (1)
- 收藏
- 关注

原创 仿nice打标签
先上效果图: 动态git图 github地址:https://github.com/zhiqiangli520210/-nice- 如果觉得还可以话,求各位道友给点个star,谢谢,这样我们都可以为开源共同努力,减少我们的工作时间成本。 首先介绍一下功能点: 本项目是基于PictureView进行优化的,github地址:https://github.com/saiwu-bigko
2017-06-29 10:22:52
1759
2

原创 EventBus从源码开始探究
首先,简单介绍一下EventBus,这是一个事件的发布与订阅框架,大大的简化了android中事件传递。 如:在fragment中任何地方都可以向activity传递事件和值,可以替代Handler、BroadCastReceiver、Interface 回调等传值方式。同时与这些方式传递事件相比,EventBus优点在于,使用简单,方便,易操作。 接下来,介绍一下EventBus的使用: 第
2017-05-15 20:52:11
450

原创 Android与js交互
应用场景:Android端拍照,选相册,然后将图片路径上传成功之后,获取到网络路径,将此路径返还给h5界面,并展示出来。 主要用到android与js交互。 效果图如下: 1.在webview类中 mWebView = (WebView) findViewById(R.id.wv); //设置webview可以与js交互 mWebView.getSettings().s
2016-12-13 14:00:25
4981
原创 助力毕业设计,点亮学术之光✨
💡个性化服务:从选题开始,结合你的专业与兴趣,挖掘独特方向;精心指导文献综述、研究方法选择,确保论文逻辑严密。针对软件、设计等项目,助力功能规划与实现。📖质量保障:严格把控内容质量,从初稿到终稿,反复修改润色,让你的毕业设计脱颖而出。🌟专业指导团队:由各领域经验丰富的专家和优秀学者组成,熟悉毕业设计流程与要求。🎓别让毕业设计成为难题,我们是你成功的有力伙伴!正在为毕业设计发愁?
2024-11-19 16:35:23
130
原创 Kotlin学习
/kotlin高阶函数的实现原理,每调一次Lambda表达式在底层被转换成了匿名类的实现方式,都会创建匿名内部类对象,造成额外的内存和性能开销 // 内联函数 inline 作用是在编译kotlin文件时直接将内联函数内联掉,这样就把内联函数执行过程放在调用此内联函数的位置,避免了java中多调用方法的操作,减少性能消耗。//// getImage(imageId) // 👈 将会运行在 IO 线程。
2024-02-23 09:25:59
702
1
原创 禁止最近任务强杀app进程
需要app应用本身加一个meta-data标签并将其value设为false,这样多任务退出时会给app发广播(不再kill其进程),app收到广播后自行进行退出操作,方法如下所示。若应用的com.xxx.recent.prop.force_stop属性为false,则在应用退出前会接收到如下广播。多任务可以不kill场景广场进程,
2023-10-25 10:31:47
304
原创 Win10任务栏无反应怎么办 Win10任务栏无反应解决方法
首先断网 然后调出任务管理器,快捷键是Ctrl+Shift+Esc 把windows任务管理器进程结束掉 然后输入并运行explorer 接下来在底部任务栏右键 选择资讯和兴趣,点击关闭
2023-07-21 19:05:02
255
原创 在 Linux 系统上下载 Android SDK
使用ubuntu系统进行车机开发,今天开始配置环境,首先是下载android studio,然后下载android sdk,这里需要注意的是linux系统不能使用windows系统下的Android sdk,亲测会出现各种问题。常规思路,下载sdk,安装之后修改环境。打开官网已经没有了sdk各个版本的下载资源。
2023-07-17 09:43:25
5374
1
原创 数据库删除聊天30天之外的历史记录
表示删除满足时间戳小于指定值的记录,第三个参数是一个字符串数组,用于替换WHERE子句中的占位符。方法用于删除符合条件的记录。第一个参数是表名,第二个参数是WHERE子句,其中。另外可以执行以下逻辑。
2023-07-12 15:30:54
396
原创 如何使用AIDL进行跨进程通信
通过以上步骤,你可以使用AIDL进行跨进程通信。需要注意的是,你需要将服务端进程的包名和Service类名设置为正确的值,以便正确连接到服务端进程的Service。同时,AIDL也支持在接口中定义回调方法,以实现双向通信。详细的使用方法和示例可以在Android开发文档中找到。
2023-07-12 15:25:58
462
原创 如何使用Messenger进行跨进程通信
Messenger和Handler提供了一种方便的方式来实现简单的进程间通信,但对于复杂的通信需求,你可能需要考虑使用其他更高级的IPC机制,如AIDL、ContentProvider等。要注意的是,你需要将目标进程的包名和Service类名设置为正确的值,以便正确连接到目标进程的Service。处理接收到的消息:在接收消息的线程或进程中,利用之前创建的Handler对象重写handleMessage方法来处理接收到的消息。在目标进程中创建一个Service,实现刚才定义的AIDL接口。
2023-07-12 15:17:20
282
原创 在Android车机上判断当前是主屏还是副屏
需要注意的是,不同车机设备可能在显示屏管理方面有所不同,因此在实际应用中可能需要根据具体情况进行适配和调整。方法返回一个显示屏数组,其中包括主屏和副屏。方法返回当前窗口所在的显示屏。,可以将其区分为主屏或副屏。,可以将其区分为主屏或副屏。
2023-07-12 09:45:03
1282
原创 android excludeFromRecents将activity在最近的使用的应用程序列表中不显示
这将使MainActivity在最近使用的应用程序列表中不显示。请注意,这只是将应用程序排除在最近使用的应用程序列表中,并不会影响应用程序的正常启动和运行。是Android应用程序清单文件(AndroidManifest.xml)中的一个属性,用于控制应用程序是否在最近使用的应用程序列表中显示。使用此属性可以为某些类型的应用程序(例如锁屏应用程序、即时通讯应用程序等)提供更好的用户体验,或者在特定情况下隐藏应用程序的存在。,可以将应用程序从最近使用的应用程序列表中排除。
2023-07-12 09:38:08
1162
原创 RemoteCallbackList 跨进程通信中的使用
这只是一个简单的示例,实际使用中还需根据具体的需求进行适当的修改和扩展。是专门用于管理跨进程回调接口的类,它提供了一组方法来注册、注销和通知回调。在 Android 中,可以使用。类来实现跨进程通信中的回调管理。
2023-07-11 17:33:53
694
原创 soundeffectsenable控制视图或控件的点击音效是否启用
参数对于所有视图和控件可能不适用,因为不是所有视图和控件都有点击音效的。具体的实现取决于各个视图和控件的特定属性和方法。参数可以用于控制视图或控件的点击音效是否启用。在这个示例中,点击按钮时不会发出点击音效。将禁用点击音效,而将其设置为。以下是在XML布局文件中使用。在Android开发中,
2023-07-11 17:32:35
497
原创 Android车载需要学习哪些知识?
Android车载开发需要掌握Android开发基础知识、车载系统架构、语音控制、导航和地图应用、多媒体和娱乐、安全性和驾驶辅助功能等相关知识。车载应用开发:学习如何使用Android开发工具和SDK来创建和构建车载应用,包括创建活动、服务、广播接收器等组件,处理用户输入和交互,以及处理车辆数据。测试和调试:学习如何进行车载应用的测试和调试,包括模拟测试、设备测试和用户体验测试,以确保应用的稳定性和性能。多媒体和娱乐:学习如何使用多媒体功能,如音频播放、视频播放和图像显示等,以及集成第三方娱乐应用和服务。
2023-07-11 13:14:30
990
原创 Android车载开发:创造智能驾驶体验
随着技术的进一步发展,Android车载开发将在未来继续引领智能驾驶的发展,为驾驶员带来更多的便利和安全性。通过将智能手机的功能与车辆的系统进行整合,Android车载开发为驾驶员提供了更多的便利和安全性。a. 提升驾驶员的便利性:Android车载应用可以将手机上的功能与车辆系统相连接,实现驾驶员的语音控制、导航、娱乐等功能,提供更加便捷的驾驶体验。b. 提升驾驶安全性:通过与车辆系统的整合,Android车载开发可以使驾驶员在驾驶过程中更加专注于道路,减少分散注意力的情况,从而提升驾驶安全性。
2023-07-11 13:11:44
498
原创 腾讯PagView动画视频组件简单使用
Android DEMO下载: https://github.com/libpag/pag-android.git。iOS DEMO下载: https://github.com/libpag/pag-ios.git。2、创建PagPlayer,设置数据源(PagComposition),绑定画布。
2023-07-08 16:21:19
2178
原创 android车载开发,如何模拟器上实现多屏
使用ActivityOptions设置activity显示在哪个屏幕上 launchDisplayId。通过Presentation来实现,他是一个Dialog(context,display)adb shell am start -n 包名+Activity。三个点,Display-addSecondary display。
2023-07-05 09:36:01
827
原创 摇一摇,可以监听开始与完成
安卓端做摇一摇,主要运用到SensorManager 这个类,通过重力传感器,获取xyz三轴的位置变化,来判断是否是摇动一、SensorManager 初始化 注册SensorManager//获取 SensorManager 负责管理传感器mSensorManager = ((SensorManager) getSystemService(SENSOR_SERVICE));i
2022-03-22 10:04:26
297
原创 Flutter 混编快速开始
Flutter 混编快速开始1 搭建flutter开发环境flutter安装配置教程:https://flutter.dev/docs/get-started/install/macos中国地区特别配置:https://flutter.dev/community/china1.1 获取Flutter SDKflutter官网下载其最新可用的安装包,解压安装包到你想安装的目录。1.2 中国区用户环境变量配置: export PATH=~/Develop/...
2022-03-16 08:55:29
710
原创 Android sharepreference槽点及改进方案
1 概述简介1.1 简介众所周知,SharedPreferences是一种轻型的Android数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。它的存储位置是在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。比较经典的使用方式例如用户输入框对过往登录账户的存储。1.2 使用方式实现SharedPrefe
2022-03-16 08:54:16
3612
原创 Android TV app前期准备
Android TV app前期准备处理电视硬件 app上检查电视设备 处理不支持的硬件features Declaring hardware requirements for TV 声明权限意味着硬件要具有该特性 检查硬件Features 处理控制器断开场景处理电视硬件电视硬件是大大不同于其他Android设备。电视不包括其他Android设备上发现的一些硬件特性,如触屏,摄像头,GPS接收器。电视也完全依靠辅助硬件设备。为了让用户与电视应用程序交互,他们必须使用一个遥控器或游戏手柄
2022-03-16 08:53:13
643
原创 Android渠道包构建流程
美菜商城Android包发布分为自有渠道和应用市场多渠道2种。不同的渠道包的区别在于应用内部有一个channel标识区分,用以友盟统计等操作。Android端接入了美团的walle实现多渠道打包。Walle介绍Android 7.0 引入一项新的应用签名方案 APK Signature Scheme v2,它能提供更快的应用安装时间和更多针对未授权 APK 文件更改的保护。在默认情况下,android Studio 2.2 和 Android Plugin for Gradle 2.2 会使用
2022-03-16 08:52:44
1247
原创 底部弹窗组建
★项目背景、需求商城项目中多个地方存在底部弹窗,现将ui统一,并输出UI组件,方便后期维护。目前涉及页面有1、商详页:商品描述底部弹窗、优惠券底部弹窗2、订单结算页:注意事项底部弹窗,由于选择日期底部弹窗业务过于耦合,所以不会抽到组件中★功能定位&目标★总体设计主要使用BottomSheetDialog与BottomDialogBuilder,内容区主要是用recyclerview实现,配合FlexibleAdapter,因此需要使用方自定义item继承Abstrac
2022-03-16 08:52:12
823
原创 Android外部调起App方案
背景日常使用场景中经常需要从app外部唤起app,比如短信链接,浏览器页面点击按钮等。传统的方式都可以使用android系统自带的拦截url ,也就是schema方式,但这种方式在拦截生效时会弹出所有可以处理此连接的app出来供用户选择,如果用户没有选择我们的app,那么这个唤起也就不成功。现在市面上有很多成熟的方案,目前美菜商城采用的是极光魔链sdk来处理。极光魔链sdk使用可以参考极光魔链接入方式https://docs.jiguang.cn/jmlink/guideline/intro/.
2021-11-30 19:20:33
2462
原创 APP接入沉浸式状态栏小结
1.全屏PopupWindow大客户中全屏的PopupWindow,通常是用于一些简单信息的展示、引导和选择等,常见的有以下几种:(1)引导PopupWindow商详页“加常用”至清单引导全部菜品&购物车页的切换门店引导(2)优惠券(3)添加商品输入键盘(4)商详大图浏览(5)结算页图片弹屏广告(6)购物车页商品需分开结算弹窗……目前大客户中的绝大多数全屏PopupWindow只要在构造函数中添加如下一行代码即可实现沉浸式状态栏,如下:this
2021-11-30 19:19:58
1098
1
原创 Android 直播调研
1 概述视频直播,可以分为 采集,前处理,编码,传输,解码,渲染 这几个环节。推流端:采集、前处理、编码、推流服务端:转码、录制、截图、鉴黄播放器:拉流、解码、渲染互动:聊天室、礼物系统、赞等2 技术点2.1 协议音频采用AAC编码、视频采用H264、H265编码。推送采用RTMP协议2.2 推流端采集:音频:AudioRecord,视频:Camera。Android要做机型适配工作手机直播SDK通过手机摄像头和麦克风直接采集视频数据和音频数.
2021-11-30 19:18:52
6117
原创 安卓应用提供64位原生的支持
一、优缺点优点:64位通常会使应用运行的更加的快,因为64位的指令集支持更高的代码运行效率,为用户提供更快、更丰富的体验 缺点:64位构建会让APK的体积变的更大,多了so库二、如何为安卓应用提供64位原生的支持针对原生代码进行编译,项目中目前使用的32位是armeabi-v7a,支持64位只需将arm64-v8a添加到应用的“build.gradle”文件中的ndk.abiFilters设置 商城中代码结构,需要增加arm64-v8a,迁移64位对应的so文件三、兼容性问题方案:..
2021-11-30 19:18:16
3324
原创 记一次解决java.lang.IllegalArgumentException: Invalid path: /storage/emulated/0问题
问题主要出现在以下代码中 static long getSDTotalSize(@NonNull Context context) { File path = Environment.getExternalStorageDirectory(); StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSize(); long totalBlocks =
2020-08-19 18:50:39
6072
原创 Android如何使用mapping文件,定位线上bug
1、获取到mapping.txt2、使用android sdk自带工具,android-sdk-tools-proguard-bin-proguardgui3、打开proguardgui工具,ReTrace选项,Mapping file中添加mapping文件,Obfuscated stack trace中粘贴线上bug信息4、ReTrace!...
2020-08-19 11:38:06
2830
原创 android线上包禁止抓取https包
<network-security-config> <base-config cleartextTrafficPermitted="true"/> <!-- Trust user added CAs while debuggable only --> <debug-overrides> <trust-anchors> <!--信任用户安装的证书--> .
2020-07-28 11:58:11
651
原创 Manifest merger failed with multiple errors ,see logs
第一次遇到这样的问题,没有找到有意义的错误信息,其实已经很明显了,mainfest的问题,我们只要找到它,然后点击左下角的Merged Manifest,查看详细的错误,对应解决就好了...
2020-06-10 10:32:53
237
原创 Flutter 基础语法学习
void main (List < String > args) { print("helloword"); //单行注释 /** * 多行注释 * *///变量和数据类型//Number : int double int score = 23; ...
2020-05-28 19:50:38
875
原创 Android 换肤调研
1)把皮肤资源文件内置于应用程序Apk的资源目录下,这种方案最简单,但是导致apk安装包会比较大,而且不好管理(2)从服务端获取资源如图片进行动态加载。(3)将皮肤资源文件打包成zip的资源文件方式提供,该方法也比较多被采用。(4)将皮肤图片资源以独立的Apk安装包的方式提供,做成插件化的方式。便于管理。插件化方式流程:1.将制作好的皮肤包上传到服务端后台2.客户端根据接口数据,处理皮肤加载逻辑模块依赖关系换肤三部曲:下载皮肤文件 ->获取资源 ->替换1、创建一个皮肤包工程
2020-05-14 17:43:36
444
2
原创 Android 10.0(Q api=29)适配
1、存储权限(分区存储)Android手机分为外部储存和内部储存内部储存:/data 目录。一般我们使用getFilesDir() 或 getCacheDir() 方法获取本应用的内部储存路径,读写该路径下的文件不需要申请储存空间读写权限,且卸载应用时会自动删除。外部储存:/storage 或 /mnt 目录。一般我们使用getExternalStorageDirectory()方法获取的路径来存取文件。因为不同厂商、系统版本的原因,所以上述的方法并没有一个固定的文件路径。那我们所说的外部储存访问限
2020-05-14 17:38:44
1403
原创 Android Q 暗黑模式
1、Force Dark一种能让应用程序快速适配深色主题,Force Dark的工作原理是系统会分析浅色主题应用下的每一层View,并且在这些View绘制到屏幕之前,自动将它们的颜色转换成更加适合深色主题的颜色。注意,只有原本使用浅色主题的应用才能使用这种方式,如果你的应用原本使用的就是深色主题,Force Dark将不会起作用。右击res目录 -> New -> Directory,创建一个values-v29目录,然后右击values-v29目录 -> New -> Valu
2020-05-14 17:30:31
1192
AIDL客户端demo
2018-10-17
AIDL服务端
2018-10-17
输入流读取之后还可以在读取吗
2015-06-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人