android
文章平均质量分 90
Luckie stone
Android应用开发。
展开
-
学习Kotlin之泛型实化
接下来就是神奇的地方了,Intent接收的第二个参数本来应该是一个具体Activity的Class类型,但由于现在T已经是一个被实化的泛型了,因此这里我们可以直接传入T::class.java。然而不同的是,Kotlin提供了内联函数的概念,内联函数中的代码会在编译的时候自动被替换到调用它的地方,这样的话就不存在泛型类型擦除的问题了。bar()是一个带有泛型类型的内联函数,foo()函数调用了bar()函数,在代码编译之后,bar()函数中的代码将可以获得泛型的实际类型。首先,该函数必须是内联函数。...转载 2022-08-27 15:46:43 · 781 阅读 · 0 评论 -
一种极低成本的Android屏幕适配方式
如果我们想在所有设备上显示完全一致,其实是不现实的,因为屏幕高宽比不是固定的,16:9、4:3甚至其他宽高比层出不穷,宽高比不同,显示完全一致就不可能了。但是通常下,我们只需要以宽或高一个维度去适配,比如我们Feed是上下滑动的,只需要保证在所有设备中宽的维度上显示一致即可,再比如一个不支持上下滑动的页面,那么需要保证在高这个维度上都显示一致,尤其不能存在某些设备上显示不全的情况。同时考虑到现在基本都是以dp为单位去做的适配,如果新的方案不支持dp,那么迁移成本也非常高。...转载 2022-08-27 15:39:57 · 404 阅读 · 0 评论 -
Android MediaCodec的数据处理方式分析
概述Android MediaCodec可以访问底层的media codecs,我们很容易利用MediaCodec来构建encoder或decoder来实现音视频编码和音视频解码的功能。简单点儿理解,一个Codec(可以认为是一个MediaCodec的实例对象)就相当于一个“处理器”:处理输入数据,并产生输出数据。如下图所示,每一个Codec都维护着一组 input buffers 和 output buffers。开始时Codec拥有所有buffers的所有权,Client(可以暂且理解为Me转载 2021-01-16 10:08:01 · 1441 阅读 · 0 评论 -
GestureDetector使用详解
Android sdk给我们提供了GestureDetector(Gesture:手势Detector:识别)类,通过这个类我们可以识别很多的手势,主要是通过他的onTouchEvent(event)方法完成了不同手势的识别。虽然他能识别手势,但是不同的手势要怎么处理,应该是提供给程序员实现的。GestureDetector这个类对外提供了两个接口和一个外部类接口:OnGestureListener,OnDoubleTapListener内部类:SimpleOnGestureListener这个转载 2020-06-20 09:53:26 · 6551 阅读 · 0 评论 -
OpenGL实现相机视频NV21格式转RGB
视频数据是由一张张图片组成的,每张图片的大小是由图片的(width * height)*3/2字节组成。图片分两部分:Y通道的长度是width * height。UV平面字节长度是:(width / 2) x (height / 2) x 2 = width x height / 2。每两个连续的字节是2 x 2 = 4个原始像素的V,U(按照NV21规范的顺序)色度字节。换句话说,UV平面尺寸...原创 2020-04-15 07:17:43 · 1004 阅读 · 0 评论 -
YYYY-MM-dd
YYYY 表示:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。YYYY 是 week-based-year,2019年12月29就已经 2020 年了yyyy 还是 2019 年...原创 2020-01-06 07:10:23 · 526 阅读 · 0 评论 -
android assets文件路径
public String getAssetsCacheFile(Context context,String fileName) { File cacheFile = new File(context.getCacheDir(), fileName); try { InputStream inputStream = context.getAssets().o...原创 2019-12-29 17:14:48 · 736 阅读 · 0 评论 -
ContextThemeWrapper解析
首先自定义一个Viewpublic class CustomView extends View { static final String LOG_TAG = "CustomView"; public CustomView(Context context) { this(context, null); } pub...转载 2018-05-10 13:49:25 · 1149 阅读 · 0 评论 -
Android Context 上下文 你必须知道的一切
1、Context概念其实一直想写一篇关于Context的文章,但是又怕技术不如而误人子弟,于是参考了些资料,今天准备整理下写出来,如有不足,请指出,参考资料会在醒目地方标明。Context,相信不管是第一天开发Android,还是开发Android的各种老鸟,对于Context的使用一定不陌生~~你在加载资源、启动一个新的Activity、获取系统服务、获取内部文件(夹)路径、创建Vie...转载 2018-07-14 06:55:59 · 1010 阅读 · 0 评论 -
Android Context完全解析,你所不知道的Context的各种细节
Context类型我们知道,Android应用都是使用Java语言来编写的,那么大家可以思考一下,一个Android程序和一个Java程序,他们最大的区别在哪里?划分界限又是什么呢?其实简单点分析,Android程序不像Java程序一样,随便创建一个类,写个main()方法就能跑了,而是要有一个完整的Android工程环境,在这个环境下,我们有像Activity、Service、Broa...转载 2018-07-19 06:55:19 · 192 阅读 · 0 评论 -
Context简单说明
1):Context:是一个抽象类,该类定义了一个android应用(Application)全局的环境(或者场景)信息,sendBroadcast,startActivity,startService等方法都是此类的抽象方法。2):ContextWrapper:继承于Context,同时在该类用有持有一个Context的引用mBase,充当起了Context的代理:该类由于继承自Contex...转载 2018-08-07 06:30:53 · 380 阅读 · 0 评论 -
项目从studio2.0.0升级到studio3.1.2遇到的坑
问题一 : Error:All flavors must now belong to a named flavor dimension. Learn more我是在项目的build.gradle中使用了productFlavors,结果编译时报了如下错误:提示:Error:All flavors must now belong to a named flavor dimension.Lea...转载 2019-04-13 10:26:49 · 573 阅读 · 0 评论 -
解决:ButterKnife在gradle 3.0以后用不了的情况
今天看着项目,想着使用黄油刀省点事儿,配置好黄油刀之后,悠哉的点击了一下运行,突然报了一个异常,如下:Error:java.lang.RuntimeException: Annotation processors must be explicitly declared now. The following dependencies on the compile classpath a...转载 2019-04-13 10:22:50 · 533 阅读 · 0 评论 -
android 解决系统字体大小设置引起的布局混乱问题(两种方法)
在手机系统设置中,若是修改了字体大小,会影响 app 内字体显示,导致布局混乱不齐。有两种方法,一般推荐第二种方法。字体设置方法一:字体大小单位使用 dp,而不是使用 sp。注意在 java 代码中需要用 dp 方式显示。默认是使用 sp。 tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 30); // 注意!!是Typed...转载 2019-03-04 07:05:37 · 1607 阅读 · 0 评论 -
关于Android打印技术的调研—如何实现PrintAdapter?
一、一些调研的说明。关于Android打印的调研,查找了View转换为Bitmap的方法,绘制Pdf文件的方法,实现了Android原生api的打印,WebView的打印,以及Bitmap打印不清晰的优化思路等等。View转换为Bitmap的方法很多,效率上没有差别特别大的,只有按照需要来选择合适的。这些方法包括:布局View转换为Bitmap,ListView转换为Bitmap,Scrol...转载 2019-01-07 07:22:02 · 2707 阅读 · 1 评论 -
JAVA虚拟机、Dalvik虚拟机和ART虚拟机简要对照
1、什么是JVM?JVM本质上就是一个软件,是计算机硬件的一层软件抽象,在这之上才干够运行Java程序,JAVA在编译后会生成相似于汇编语言的JVM字节码,与C语言编译后产生的汇编语言不同的是,C编译成的汇编语言会直接在硬件上跑。但JAVA编译后生成的字节码是在JVM上跑,须要由JVM把字节码翻译成机器指令。才能使JAVA程序跑起来。JVM运行在操作系统上,屏蔽了底层实现的差异。从而有了J...转载 2018-12-16 16:55:39 · 194 阅读 · 0 评论 -
Android 压缩解压zip文件
对于zip压缩包内包含中文目录或者中文文件的话,参考网上的资源: “使用apache的zip工具包(所在包为ant.jar )代替JDK的zip工具包,因为java类型自带的不支持中文路径,不过两者使用的方式是一样的,只是apache压缩工具多了设置编码方式的接口,其他基本上是一样的。” 下面是使用apache zip工具包的具体源码:public static void unZipFile...转载 2018-12-01 07:38:36 · 2782 阅读 · 0 评论 -
使用git reflog 命令来查看历史提交记录并使用提交记录恢复已经被删除掉的分支
一、问题描述昨天下午有个同事急急忙忙跑我座位上,要我帮忙,说他刚刚因为手误,将他本地的某个project的某个branch分支删除了,并且也将Gitlab上面的远程分支也删除了。他本来是想发起merge request的,但是后面他眼神不好以为已经merged过了,就直接删了Gitlab上的远程分支并且将他本地的这个分支也直接删除了。现在他跑过来问我有没有办法恢复,不然他这一天的工作就白费了...转载 2018-11-26 07:21:33 · 974 阅读 · 0 评论 -
关于在android中,如何一步到位,全局替换控件样式的一些看法
在开发中,经常要替换RatingBar,EditText,RadioButton,CheckBox等等控件的样式,如何替换,相信开发的朋友都会,我就简单带过。 比如:一个CheckBox:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="ve...转载 2018-11-17 18:05:57 · 588 阅读 · 0 评论 -
android 中vector的用法
随着android L的发布,带来了VectorDrawable,矢量图的支持矢量图在很久很久以前就已经应用起来了,是一种基于xml的图像,因为图片不提供具体的像素,只提供的是绘图的指令,所以好处是 占用内存非常小,性能高,可以任意缩放而不会失真,但是缺点也很明显,没有位图表达的色彩丰富。 然而现在app风格越来越扁平, 拟物化已经成了过去,矢量图成了越来越多人的选择。android在最新...转载 2018-11-17 17:15:51 · 15164 阅读 · 0 评论 -
AndroidX了解一下
1.说明官方原文如下:We hope the division between android.* and androidx.* makes it more obvious which APIs are bundled with the platform, and which are static libraries for app developers that work across d...转载 2018-11-06 07:23:29 · 1948 阅读 · 0 评论 -
android app版本升级(DownloadManager、适配6.0、7.0)
说明:1.本文使用系统DownloadManager在通知栏更新下载进度 2.动态权限使用第三方库EasyPermissions(https://github.com/googlesamples/easypermissions) 3.下载完成的App安装适配7.0 4.提示下载框(AlertDialog)是依附于Activity(UpdateActivity)的,这样做是为了解决“进入首...转载 2018-10-28 17:33:52 · 556 阅读 · 0 评论 -
Android之不要滥用SharedPreference
本文不是与大家一起探讨SharedPreference的基本使用,而是结合源码的角度揭秘对SharedPreference使用不当引发的严重后果以及该如何正确使用。SharedPreferences是Android平台上一个轻量级的存储辅助类,用来保存应用的一些常用配置,它提供了string,set,int,long,float,boolean六种数据类型。最终数据是以xml形式进行存储。在应...转载 2019-06-07 09:50:37 · 763 阅读 · 0 评论 -
Android使用TypedValue将dp/sp等转换为px的方式介绍
一、之前习惯的dp转px和sp转px的写法import android.content.Context;/*** 尺寸转换工具* <p>* Created by ouyangpeng on 2015/9/21.*/public class SizeConvertUtil { /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素)...转载 2019-06-09 09:23:48 · 2328 阅读 · 0 评论 -
Android 的 Java 9,10,11,12 的支持
原文链接 :Android’s Java 9, 10, 11, and 12 Support 原文作者 : jakewharton本系列的第一篇文章探讨了Android对Java 8的支持。尽管Android对Java 8的语言特性和API的支持还没有完全覆盖。但是D8已经为我们提供了部分核心的语言特性支持。上篇文章很多人反馈Java 8版本已经太旧了,Jav...转载 2019-06-13 06:38:21 · 7950 阅读 · 0 评论 -
APP的启动过程(附图)
点击桌面APP图标时,Launcher的startActivity()方法,通过Binder通信,调用system_server进程中AMS服务的startActivity方法,发起启动请求 system_server进程接收到请求后,向Zygote进程发送创建进程的请求 Zygote进程fork出App进程,并执行ActivityThread的main方法,创建ActivityThrea...原创 2019-08-10 04:46:34 · 848 阅读 · 0 评论 -
uses-permission和permission详解
1.<uses-permission>:官方描述:If an application needs access to a feature protected by a permission, it must declare that it requires that permission with a <uses-permission> element in...转载 2019-08-02 06:50:18 · 3024 阅读 · 0 评论 -
getExternalStorageDirectory()和getExternalFilesDir()的区别
app专属文件就是那些只有该app才可以使用的文件,例如专属格式的电子书,app独立文件就是那些不依赖于某特定app的文件,例如照片。App独立文件这类文件当我们删除应用之后,还应该保留在手机上的,例如拍照的照片,不应该随着删除应用而被删除掉。对于这类文件,Android给我们提供了特定的目录,这些目录都是以DIRECTORY开头的,例如:DIRECTORY_MUSIC , DIRECTOR...转载 2019-07-07 10:49:04 · 21213 阅读 · 2 评论 -
Android使用Quantity Strings来实现全球化的单复数功能
一、背景描述之前APP的业务只在国内,所有的字符串都是中文的,目前APP业务扩展到了国外,因此很多国际化适配的工作就需要做了。比如不同语言在语法数量一致上具有不同的规则。在英语中,数量 1 是一种特殊情况。 我们会写成“1 book”,但如果是任何其他数量,我们则会写成“n books”。这种对单复数的区分很常见,但其他语言进行了更加细致的区分。因此,如果没有做好英语的单复数适配的话,...转载 2019-07-02 07:01:14 · 1799 阅读 · 0 评论 -
Android实现二维码扫描功能(五)-封装与接入ZXing扫码库
简介《Android实现二维码扫描功能》系列文章陆续收到不少开发者的反馈,看到大家这么关注这个专栏,最近抽空对ZXing扫码和生成二维码又做了优化,封装了一个Android library:zxing-lib,这样在接入应用的过程中会更加方便。预览在zxing-lib库的基础上做了新版的demo,新添加了生成二维码功能,预览效果如下:(由于录像的mp4转换gif过程中存在失真,色彩有点奇怪...转载 2019-06-24 06:47:24 · 2372 阅读 · 3 评论 -
Android实现二维码扫描功能(四)-ZXing识别图片二维码,相册选图
本篇我们介绍如何识别相册中的图片(含二维码)动态演示使用模拟器录制了动画演示,模拟器有些花屏。。看着难受的可以看下面的静态图:页面截图因为模拟器的摄像头不能用,会花屏,这里放几张过程图。权限问题部分朋友在打开相册时遇到读写权限未授权的问题,我在开发的时候没有遇到,也没有注册读写权限,因为是通过相册打开的,当然不同的Android有差异,另外可能部分厂商的ROM也做...转载 2019-06-24 06:47:17 · 3827 阅读 · 0 评论 -
Android实现二维码扫描功能(三)-闪光灯控制
本篇我们对光线暗淡情况下闪光灯的使用做出介绍。效果晚上测试时:开灯后:未开灯:实现步骤1、在activity_scanner.xml界面上加上闪光灯开关按钮。可以是Button、Checkbox等控件。<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xm...转载 2019-06-24 06:47:10 · 1019 阅读 · 1 评论 -
Android实现二维码扫描功能(一)-ZXing插件接入
效果预览先上图展示效果(模拟器没有摄像头,录出来效果不好,将就看)集成步骤1、拷贝本项目demo中的com.google.zxing5个包引入到自己的项目中。2、拷贝本项目demo中的布局activity_scanner.xml和toolbar_scanner.xml3、拷贝资源目录raw至本项目中,beep.ogg是扫描成功时的提示音。4、拷贝或合并文件内容attrs...转载 2019-06-24 06:46:56 · 10771 阅读 · 3 评论 -
Android通过反射打造可以存储任何对象的万能SharedPreferences
我们通常使用SharedPreferences存储一些需要保存在本地,但又不至于存储在数据库里的一些数据,一般我们用它来存储一些用户名,密码等数据是非常方便的,那么如果我们想要存储的信息有10几条,我们就得写10几行重复的代码把他们存进去,取出来的时候还得写10几行代码将他们一条一条取出来,那么有没有什么办法可以只需要一行代码就可以将他们存进去,一行代码就将他们取出来?答案是有的,这篇文章我们就介...转载 2019-06-25 06:41:50 · 162 阅读 · 0 评论 -
Intent之复杂数据的传递
1.Intent传递简单数据还记得我们在Activity那里学过如何在两个Activity中互相传递简单数据的方法吗?就是可以直接通过调用Intent的putExtra()方法存入数据,然后在获得Intent后调用getXxxExtra获得对应类型的数据;传递多个的话,可以使用Bundle对象作为容器,通过调用Bundle的putXxx先将数据存储到Bundle中,然后调用I...转载 2018-06-15 06:34:45 · 312 阅读 · 0 评论 -
Intent的基本使用
Intent(意图),Android通信的桥梁,比如我们可以通过:startActivity(Intent)/startActivityForResult(Intent):来启动一个Activity startService(Intent)/bindService(Intent):来启动一个Service sendBroadcast:发送广播到指定BroadcastReceiver 另...转载 2018-06-19 05:54:54 · 23765 阅读 · 0 评论 -
Android实现二维码扫描功能(二)-ZXing个性化与近距离识别优化
个性化定制每个APP都有自己的表现形式,实现个性化扫码界面定制,主要有两个地方:activity_scanner.xml界面文件com.google.zxing.view.ViewfinderView扫码控件下面分别来说明。界面文件activity_scanner.xml源码如下:<?xml version="1.0" encoding="utf-8"?><...转载 2019-06-24 06:47:03 · 816 阅读 · 0 评论 -
Parcelable和Serializable的区别
一、对象为什么需要序列化 1.永久性保存对象,保存对象的字节序列到本地文件。 2.通过序列化对象在网络中传递对象。 3.通过序列化对象在进程间传递对象。 二、当对象需要被序列化时如何选择所使用的接口 1.在使用内存的时候Parcelable比Serializable的性能高。 2.Serializab...转载 2018-08-26 07:40:52 · 658 阅读 · 0 评论 -
android.support已死,androidx当立——弃用support库指南
前言androidx 是对 android.support.xxx 包的整理后产物。由于之前的support包过于混乱,所以,google推出了 androidX。自support v7:28.+开始,大部分support包都会迁移到androidx下,,所以建议开发者们尽早将项目转移到androidx下迁移步骤1.先备份项目!2.使用Android Studio自动迁移在菜单栏中...转载 2019-06-13 06:38:29 · 11386 阅读 · 0 评论 -
android之PendingIntent
pendingIntent必须要满足一定条件下,才会触发放在里面的intent操作。可以在程序外部进行执行。即使是程序已经退出了。在Android中,我们常常使用PendingIntent来表达一种“留待日后处理”的意思。从这个角度来说,PendingIntent可以被理解为一种特殊的异步处理机制。不过,单就命名而言,PendingIntent其实具有一定误导性,因为它既不继承于Inte...转载 2018-07-01 11:16:12 · 1047 阅读 · 0 评论