安卓开发
文章平均质量分 67
程序猫King
安卓,小程序开发
展开
-
在安卓中使用WebSocket
WebSocket是一种在Web浏览器和服务器之间进行实时双向通信的协议。与传统的HTTP请求-响应模型不同,WebSocket允许服务器主动向客户端推送数据,而不需要客户端发起请求。当然,发展到如今,WebSocket已经不再局限于Web浏览器了,也可以在移动应用、桌面应用上使用。原创 2023-06-20 10:00:52 · 5213 阅读 · 2 评论 -
Android低功耗蓝牙(BLE)开发(二)
在Android BLE通信中,如果要发送的数据大小超过MTU(最大传输单元)的限制,就需要进行数据分包处理。在上一篇文章中我们了解了BLE的相关概念,这里我们来实际用代码演示安卓进行BLE连接和通讯的功能。原创 2023-06-16 11:28:08 · 2885 阅读 · 0 评论 -
Android低功耗蓝牙(BLE)开发(一)
BLE是指低功耗蓝牙(Bluetooth Low Energy),也被称为蓝牙4.0。它是蓝牙技术的一种变体,旨在消耗更少的电量,具有便携性,并且可以在无线传输距离较短的范围内实现低速数据传输。BLE技术已经广泛应用于智能家居、健康监测、物联网等场景中。原创 2023-06-16 11:28:31 · 3210 阅读 · 0 评论 -
关于安卓10以上连接wifi无法联网的问题
在Android10之前应用内连接wifi是调用addNetwork和enableNetwork。但在Android10以后以上方法不会生效,在使用新api连接成功后,也可能无法访问外部网络。原创 2023-02-13 12:03:15 · 3071 阅读 · 2 评论 -
Android音视频开发(九)MediaCodec解码播放视频
简介MediaCodec是Android提供的用于对音视频进行编解码的类,即编码器/解码器组件。它通过访问底层的Codec来实现编解码的功能。是Android media基础框架的一部分,通常和 MediaExtractor, MediaSync, MediaMuxer, MediaCrypto, MediaDrm, Image, Surface和AudioTrack 一起使用,在视频播放和视频压缩编码中起到重要作用。官方文档工作流程整体的流程上看,MediaCodec编解码器是对输入数据进行处理然后原创 2020-05-28 14:32:51 · 2454 阅读 · 0 评论 -
Android音视频开发(八)MediaExtractor
简介MediaExtractor,用于提取指定媒体文件的媒体信息的一个工具类。说白一点,就是可以利用它从一个视频文件中提取出视频的相关信息,例如视频轨道,音频轨道,时长,格式等等。MediaExtractor通常和MediaCodec一起使用,用于视频解码播放。说明在使用MeidaExtractor之前,我们先了解下一个视频文件的构成:音频数据视频图像数据(帧)文件信息,如大小,时...原创 2020-05-06 16:52:28 · 1006 阅读 · 0 评论 -
Android音视频开发(七)AudioTrack播放音频
之前我们介绍了AudioRecord是用于录制音频的,那么与之相对应,AudioTrack是用于播放音频的。简介AudioTrack类用于管理和播放单个音频资源。它允许将PCM音频缓冲区流传输到音频接收器以进行播放。AudioRecord录制PCM数据是通过“read”形式读入缓冲区,那么AudioTrack则是通过"write"形式从缓冲区输出。AudioTrack实例可以在两种模式下运行...原创 2020-04-29 11:11:39 · 951 阅读 · 0 评论 -
Android音视频开发(六)MediaRecorder录制视频
简介安卓api提供了Camera类控制相机捕获图像,在api21以后,安卓也提供了Camera2,Camera变得过时了,但为了兼容性,这里还是使用Camera。使用使用Camera进行拍照摄像前,你得先申请权限:<!-- 相机权限 --><uses-permission android:name="android.permission.CAMERA" />&l...原创 2020-03-31 17:01:03 · 593 阅读 · 0 评论 -
Android音视频开发(五)AudioRecord录制音频
简介AudioRecord是安卓多媒体框架中用于录制音频的工具。它支持录制原始音频数据,即PCM数据,PCM数据不能被播放器直接播放,需要编码压缩成常见音频格式才能被播放器识别。而原生api也提供了AudioTrack播放PCM数据。录音流程AudioRecord是通过read方式不断读取来自音源输入的数据流(字节流),进而把数据流保存成PCM数据。开始录音的时候,AudioRecord需...原创 2020-03-26 11:18:42 · 857 阅读 · 0 评论 -
Android音视频开发(四)MediaRecorder录制音频
Android中,音频的采集通常使用AudioRecord相关的API,下面我来介绍一下AudioRecord:原创 2020-03-25 10:34:25 · 427 阅读 · 0 评论 -
对安卓开发者的一些建议
发展现状Android系统最早正式发布在2008年,但正式开始兴起大概是在2009年,到了2012年左右,安卓已经发展迅猛,涌现一大批安卓开发者,然而随着市场的饱和态逐渐呈现,加上各种跨平台技术的出现,到了今天,很多安卓开发者的担忧也出现了,市场到底是供不应求还是供过于求?说实话,这个问题我很难回答,因为你说市场不需要安卓开发者了吗?需要,但需求量确实不怎么高。如今,纯安卓原生开发可谓是越...原创 2020-03-16 11:05:02 · 308 阅读 · 0 评论 -
Android音视频开发(三)TextureView
简介TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。与SurfaceView的区别SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。TextureView不会创建单独的窗口,而是充当常规View。此特点允许对TextureView进行移动,转换,设置动画等操作。例如,可以设置透明度。TextureV...原创 2020-03-16 10:04:58 · 1039 阅读 · 0 评论 -
Android音视频开发(二)SurfaceView
简介官方API文档介绍:SurfaceView是View的子类,它内嵌了一个专门用于绘制的Surface,你可以控制这个Surface的格式和尺寸,Surfaceview控制这个Surface的绘制位置。surface是纵深排序(Z-ordered)的,这表明它总在自己所在窗口的后面。SurfaceView提供了一个可见区域,只有在这个可见区域内的surface内容才可见。surface的排版...原创 2020-03-12 10:02:28 · 898 阅读 · 0 评论 -
Android音视频开发(一)音视频基础知识
前言最近工作方面没有太多事,所以难得有些空闲时间,针对当前音视频app的流行,为了不让自己淘汰,提升自己的专业能力,于是决定学习音视频开发相关知识,然而自己这方面却是一个小白,所以希望通过博客的形式记录下自己一步一步学习的过程,也希望能给这方面的新手一些借鉴。学习计划1.了解音视频的基础知识2.了解SurfaceView,TextureView的实现和使用3.Android平台...原创 2020-03-10 14:14:33 · 3844 阅读 · 2 评论 -
安卓项目框架搭建:Jetpack+协程+Retrofit
本文将给大家演示如何在安卓项目使用协程+Retrofit进行网络请求,包含了异常的封装处理,可以用在一个商用产品架构上。1.引入依赖//使用协程implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2"//OkHttpimplementation 'com.squareup.okhttp3:okht...原创 2019-12-11 14:03:58 · 1446 阅读 · 0 评论 -
kotlin代替findViewById的方法
在安卓项目使用了Kotlin之后,发现Kotlin一个相当强大的地方,可以不用findViewById,引入布局,直接使用控件方式一:使用kotlin插件自动生成引入kotlin扩展插件apply plugin: ‘kotlin-android-extensions’引入kotlin自动生成的相关布局文件import kotlinx.android.synthetic...原创 2019-12-03 16:26:07 · 6293 阅读 · 1 评论 -
Kotlin与DataBinding使用注意事项
在使用kotlin开发的安卓项目中,开启DataBinding步骤如下:1.在app的build.gradle的android配置项下添加如下:dataBinding{ enabled = true}2.在app的build.gradle中引入:apply plugin: 'kotlin-kapt'3.在dependencies中添加:kapt 'com....原创 2019-12-03 16:07:36 · 444 阅读 · 0 评论 -
安卓架构组件实战——ViewModel+LiveData
在谷歌官方提供的安卓架构组件中,有ViewModel、LiveData、Lifecycle、DataBinding等,他们共同组成了一个完整的MVVM架构,实现了视图与业务逻辑分离,并且提供友好的生命周期管理。本文不会涉及到这些组件的原理解析,百度能找到一堆的我就不重复造轮子了,直接上干货教你如何使用。在使用这些组件之前,我们先来了解下MVVM:一、MVVMMVVM即Model(数据...原创 2019-11-29 17:19:54 · 827 阅读 · 0 评论 -
安卓架构组件实战——Lifecycle
注:本文涉及代码请看:项目源码Lifecycle是谷歌推出的一个架构组件,用于感知组件生命周期,并赋予了非组件对象感知生命周期的能力Lifecycle组件用来响应另一个组件的生命周期状态变化,例如Activity和Fragment,可以帮助非生命周期组件跟Activity、Fragment或Service的生命周期关联在一起,从而在不同生命周期内执行相应操作。其他说明请参考谷歌官网文档Li...原创 2019-11-28 11:22:19 · 374 阅读 · 0 评论 -
使用Kotlin+MVP+AndroidX搭建安卓项目框架
最近深入学习了下kotlin,发现还是挺不错的,特别是其中的协程,改变了以往我对安卓开发使用线程的习惯,这东西用起来方便,省去了使用java而产生的各种回调和主子线程通讯的麻烦,当然如果你习惯了Java,要转kotlin并使用协程改造你的项目,成本还是挺大的。谷歌正在用kotlin逐步取代Java,同时也在用androidx替代androidsupport包,而MVP也是这两年非常流行的设计模式...原创 2019-11-27 15:27:26 · 2521 阅读 · 0 评论 -
AndroidStudio使用小技巧
1.自动导包打开File->Settings->Editor->General->Auto Import,勾选:(如下图)Add unambiguous imports on the fly Optimize imports on the fly(for current project)即可在写代码的时候自动引入类所在的包。2.类文件注释模版...原创 2019-11-25 15:24:41 · 243 阅读 · 0 评论 -
支持笔锋效果的手写签字控件
基于安卓的手写签字控件,支持笔锋github:https://github.com/GdinKing/HandWrite功能空白画板手写,田字格逐字手写 实现笔锋效果 支持橡皮擦,撤回/恢复,清空画布功能 画笔颜色大小设置 支持传入初始图片 画布大小设置,文字区域截取 主题颜色设置 支持传入初始显示图片 适配横竖屏布局示例用法请下载github源码参考示例...原创 2019-01-07 16:09:00 · 4779 阅读 · 6 评论 -
Android使用Put方式提交数据
前一阵子,公司有个api接口必须使用put方式请求提交数据,但是在java中put方式的使用相当少,网上几乎很难找到相应的例子,摸索了一阵子,终于搞定了,下面分享给大家: 1、四种http请求方式作用POST /uri 创建 DELETE /uri/xxx 删除 PUT /uri/xxx 更新或创建 GET /uri/xxx 查看 ...原创 2015-09-30 14:33:04 · 5526 阅读 · 0 评论 -
搭建基于XMPP的即时通讯系统
1 参考资料XMPP官网XMPP中文xmpp基本概念 (作者:RiverLi,来源:简书)Openfire官网Openfiregithub地址Openfire教程网Smack github地址2 即时通讯的相关知识2.1 即时通讯的概述即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷;服务提供商也提...原创 2019-06-03 11:30:55 · 6204 阅读 · 0 评论 -
AndroidStudio配置kotlin
Kotlin出来有很长一段时间了,作为一个安卓开发党之前一直在使用java,当我接触到kotlin时,顿时就被它惊艳到了,原来代码可以如此简洁!工欲善其事必先利其器,废话少说,接下来我就给大家介绍一下如何在AndroidStudio配置支持kotlin:首先,我使用的是AndroidStudio版本是3.4.1(老版本玩家能升级就升级吧,但要注意Gradle与项目的兼容性),AS3.0及以上版...原创 2019-07-19 14:25:02 · 3881 阅读 · 3 评论 -
安卓APK瘦身
安卓开发中,打包生成的APK大小对于开发者来说,其实并没有多大影响,但在面向用户时,APK的大小就很重要了,APK过大会导致用户下载需要耗费更多时间与流量,从而影响用户体验与产品推广,特别是那种频繁更新的应用。因此,减少APK大小很重要,下面我将介绍如何给APK瘦身:1.APK资源组成在对APK进行“瘦身‘前,我们先来了解下APK的组成,我们可以把一个apk解压,目录结构一般如下所示:...原创 2019-07-24 15:50:11 · 742 阅读 · 0 评论 -
安卓开发错误记录(一)
1.AndroidStudio在Debug模式下安装应用报错:INSTALL_FAILED_TEST_ONLYTEST_ONLY的意思就是版本仅仅用于测试,查看一些资料之后有种说法是项目中所用的编译器版本和gradle版本不能为alpha版本,需要降低gradle版本等,查看了外网的一些资料也有说使用用的插件以及依赖库中不能使用alpha版本、不能使用instant run功能。我是用的是...原创 2019-07-26 15:15:28 · 298 阅读 · 0 评论 -
Android6.0-9.0版本适配攻略
众所周知,Android版本更新飞快,各个版本都有一些新的特性增加,这就出现了许多坑,导致了开发者要不断进行适配,下面我就来谈谈从Android6.0到Android9.0主流特性的适配过程。Anrdoid 6.01.动态权限Android 6.0最大的更改就是动态权限申请,详细的说明请查看我的另一篇博客:Android开发之Android6.0权限管理2.弃用HttpClient...原创 2018-12-10 11:53:13 · 564 阅读 · 0 评论 -
Java实现DES加密解密
DES(Data Encryption Standard)是一种对称加密算法,所谓对称加密就是加密和解密都是使用同一个密钥。加密原理:DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行"异或"运算;接着交换这...原创 2018-11-09 16:27:01 · 99479 阅读 · 17 评论 -
安卓学习心得二:自定义ViewGroup
Android的UI界面都是由View和ViewGroup及其派生类组合而成的。其中,View是所有UI组件的基类,而 ViewGroup是容纳这些组件的容器,ViewGroup是View的子类,.所以它也具有View的特性,但它主要用来充当View的容器,将其中的View视作自己的孩子,对它的子View进行管理,当然它的孩子也可以是ViewGroup类型 View对象是Android平...原创 2016-03-28 17:13:15 · 526 阅读 · 0 评论 -
Android中R文件不见了的解决方法
1 方法一:AndroidStudio上工具栏Build -Clean Project2 方法二:AndroidStudio上工具栏Build -Rebuild Project如果上面的方法都不行 说明我们的工程有问题资源文件名不能使用java的关键字 资源文件名只能是小写字母 布局文件出错,layout里面可看到错误提示修改完后保存,clean一下即可...原创 2015-04-26 10:52:15 · 1563 阅读 · 0 评论 -
LeakCanary检测安卓内存泄漏
我们知道,在安卓应用程序运行过程中,偶尔会出现程序异常退出的情况,这一般是内存泄漏(OOM)的问题。 内存泄漏一般的排查步骤: 1.通过统计平台了解OOM情况 2.重现问题 3.在发生内存泄漏时Dump内存 4.在内存分析工具中反复查看,找出原本该被回收的对象 5.计算此对象到GC roots的最短强引用路径 6.确定并修复问题 因此,我们将需要内存泄漏检测分析工具。 在安卓开发中原创 2016-03-30 17:48:56 · 1406 阅读 · 0 评论 -
Java对象的四种引用类型
参考博客:http://my.oschina.net/Bruce370/blog/511707在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引转载 2016-04-03 20:18:27 · 10642 阅读 · 0 评论 -
安卓缓存-LruCache介绍
在Android中,有一个叫做LruCache类专门用来做图片缓存处理的。 它有一个特点,当缓存的图片达到了预先设定的值的时候,那么近期使用次数最少的图片就会被回收掉。 我们来看看它的源码(注意是在android.support.v4.util下):package android.support.v4.util;import java.util.LinkedHashMap;import jav原创 2016-04-02 18:59:18 · 1013 阅读 · 0 评论 -
PullToRefreshScrollView包含复杂组合控件时的页面定位问题
第三方控件PullToRefreshScrollView中如果有ListView+其他控件组合时,切换界面时会出现无法定位到顶部或上次滑动停留的位置解决方法:(1)在activity或fragment适合的生命周期中(如onResume())调用:mPullRefreshScrollView.setFocusableInTouchMode(true);(2)也可以使用mPul...原创 2015-08-25 15:59:36 · 3081 阅读 · 1 评论 -
解决Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCom
问题:AndroidStudio的Gradle编译时提示 com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice....原因:support v4包多次导入,或者是在不同的build.gradle文件中的dependencies 中compile了多次原创 2015-11-11 14:56:27 · 8663 阅读 · 0 评论 -
安卓代码混淆指南
混淆代码能有效防止项目被反编译,同时还可以适当减少apk的大小,在实际开发过程中尤为重要,经过长时间的摸索,对代码混淆有了一定的了解,下面写下个人心得:1. 代码混淆的重要文件:proguard-rules.pro,如果你不小心删掉了,从其他地方复制一个或自己创建一个。2. 开启混淆:将build.gradle下的buildTypes->release->minifyEna...原创 2015-09-29 11:13:41 · 1569 阅读 · 0 评论 -
Android studio报错 Error retrieving parent for item: No resource found that matches the given name ...
用Android studio创建一个工程,我选择了Phone and Tablet平台, Minimum SDK选择了API 9,也就最低支持是Android 2.3,新建完后报了很多Error retrieving parent for item: No resource found that matches the given name ‘android:TextAppearance....原创 2015-09-30 14:16:06 · 2232 阅读 · 0 评论 -
改变AlertDialog默认背景
安卓4.0自带的AlertDialog太丑了有木有?黑色的背景很难看,今天实现的是怎么自定义style实现改变AlertDialog背景首先在values/styles.xml文件中增加如下style<style name="AlertDialog" parent="@android:Theme.DeviceDefault.Light.Dialog"><!-- 这里设...原创 2015-09-05 14:17:35 · 22928 阅读 · 0 评论 -
安卓非自定义标题栏实现“返回”按钮
按钮效果如下图“图标+标题+箭头”所示,点击后能返回之前调用它的Activity,这并不是自定义按钮,而是使用了安卓的一些特殊方法生成的,很多人或许不知道这个隐秘的功能,下面我来介绍下:方法一:安卓4.1以后,添加了android:parentActivityName属性,添加这个属性后,即可出现图所示按钮,属性的值为该Activity声明了一个父Activity,即使你更改成其他原创 2015-04-26 11:37:51 · 4904 阅读 · 0 评论