
android学习
文章平均质量分 60
WongWoo1991
不一样的程序猿
展开
-
Kotlin笔记
一、类class1、构造器Koltin 中的类可以有一个 主构造器,以及一个或多个次构造器,主构造器是类头部的一部分,位于类名称之后:class Person constructor(firstName: String) {}如果主构造器没有任何注解,也没有任何可见度修饰符,那么constructor关键字可以省略。class Person(firstName: String) {}2、getter 和 setter属性声明的完整语法:var <propertyName>[原创 2021-03-19 16:37:17 · 390 阅读 · 0 评论 -
安卓市场上架调研
大部分应用商店会要求著作权证书。应用商店酷安市场Google Play豌豆荚安智vivo 应用商店是否需要软著xx√x (推广费5000元)广告商优量汇优量汇原创 2021-01-27 11:31:59 · 817 阅读 · 1 评论 -
android bmob集成
1、项目中添加引用在项目下的build.gradle下,增加一行:allprojects { repositories { // ....省略 maven {url 'https://dl.bintray.com/chaozhouzhang/maven' } }}在module的build.gradle下添加: implementation 'cn.bmob.android:bmob-sdk:3.7.8' implementation原创 2020-11-25 21:12:38 · 628 阅读 · 0 评论 -
androidstudio run按钮灰色不可运行
1、app的build.gradle的compileSdkVersion没有2、在model下拉框中选择app.如果下拉框中没有app,(没有工程名),那么请先去设置:Android Studio 3.3.0 File->sync project with gradles files;(老版本的AS可能是tools ->Android->sync project with gradles files;)...原创 2020-11-24 22:04:08 · 1647 阅读 · 0 评论 -
startActivityForResult()替代方案Activity Result Api
startActivityForResult()在使用过程中,还需要与onActivityResult()配对使用,定义大量的requestCode,属实比较麻烦,而现在startActivityForResult()方法已经被谷歌标记为了Deprecated,方法不推荐使用了,谷歌推荐使用Activity Results API。首先引入: implementation 'androidx.activity:activity:1.2.0-beta01' implementation 'a原创 2020-11-10 17:09:03 · 18571 阅读 · 1 评论 -
从0实现RxJava
参考:https://mp.weixin.qq.com/s/hiCO5_0Rc5sXeis13CZrYA先做一个最简单RxJava:/** * 观察者 */public interface MyObserver<T> { void onSubscribe(); void onNext(T t); void onError(Throwable e); void onComplete();}//真正的被观察者public interface MyO原创 2020-10-23 17:00:48 · 242 阅读 · 0 评论 -
Android studio修改项目名称
有时候我们从旧有项目代码复制过来新建一个项目,修改项目根目录的文件名之后,发现AS中的项目名称并没有改变,下面总结一下完整的过程。1、修改项目根目录的文件名2、打开.idea/.name文件里面内容只有一个,就是项目名称,修改为新项目名称即可3、重命名旧项目名称.iml,改成新项目名称.iml然后打开这个.iml文件把这个project.id改成新项目名称即可。...原创 2020-09-25 10:35:19 · 2193 阅读 · 0 评论 -
MPAndroidChart总结
1、在使用环形图表的时候,我遇到一个问题,环上显示不出百分号(%)?查看设置代码:mChart.setUsePercentValues(true); //使用百分比显示这里正确设置了,然后发现下面代码有猫腻:pieData.setValueFormatter(new PercentFormatter());查看PercentFormatter源代码:public class PercentFormatter extends ValueFormatter{ public Deci原创 2020-09-24 16:32:47 · 668 阅读 · 0 评论 -
Dagger2学习
官方GitHub:https://github.com/google/dagger示例代码(参考:https://blog.youkuaiyun.com/wusejiege6/article/details/102644782)public class MainActivity extends AppCompatActivity implements MainContract.View { private MainPresenter mainPresenter; ... @Override原创 2020-08-17 16:44:13 · 204 阅读 · 0 评论 -
百度AI语音SDK集成
异常1、报错[ERROR]asr error:{“sub_error”:4004,“error”:4,“origin_result”:{“sub_error”:4004,“error”:4,“sn”:“cuid=B2C0D5D67F92F66D050236F30A233EA3|O&sn=728dbbf5-afd4-40b9-aa38-a9f0d6371941&nettype=4”,“desc”:“App name unknown[(-3004)4: Open api request lim原创 2020-07-31 10:51:51 · 2490 阅读 · 0 评论 -
自定义view中使用selector
需求如下:整体是一个自定义view,该view中有一个图片,点击后切换状态,图片跟着切换。很自然的想到selector中的state切换,定义一个selector文件如下:<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/voice_ing" android:state_selected="true"/> &原创 2020-07-30 16:22:22 · 805 阅读 · 0 评论 -
AndroidStudio与gradle版本异常
1、AndroidStudio版本太低AndroidStudio版本太低,与下载的gradle版本不兼容,报错如下:java.lang.AbstractMethodError: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierImpl.getModuleIdentifier()Lorg/gradle/api/artifacts/ModuleIdentifier; at org.gradle.api.internal.原创 2020-06-03 17:09:31 · 2617 阅读 · 0 评论 -
MMKV学习(三)Android使用
MMKVMMKV 原理MMKV for Android 多进程设计与实现MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015 年中至今在微信上使用,其性能和稳定性经过了时间的验证。近期也已移植到 Android / macOS / Win32 / POSIX 平台,一并开源。Android 指南安装引入推荐使用 Maven:dependencies { implementation 'com.原创 2020-06-03 14:49:22 · 5876 阅读 · 0 评论 -
MMKV学习(二)Protobuf
MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从这里看出MMKV底层序列化/反序列化使用 protobuf 实现, protobuf 可类比JSON 和 XML。他是一种与语言无关、与平台无关,是一种可扩展的用于序列化和结构化数据的方法,常用于用于通信协议,数据存储等。他是一种灵活,高效,自动化的机制,用于序列化结构化数据,对比于 XML,他更小(310倍),更快(20100倍),更简单。对比 JSON 和原创 2020-06-03 14:19:18 · 793 阅读 · 0 评论 -
MMKV学习(一)mmap映射原理
MMKV原理通过 mmap 内存映射文件,提供一段可供随时写入的内存块,App 只管往里面写数据,由操作系统负责将内存回写到文件,不必担心 crash 导致数据丢失。与传统的SharedPreferences实现方式不同,MMKV通过 mmap 内存映射文件来读写,下面先了解一下mmap 内存映射。mmap 内存映射要说mmap 内存映射的优势,要有比较才行,先说一说普通的文件操作。常规文件操作常规文件操作为了提高读写效率和保护磁盘,使用了页缓存机制。这样造成读文件时需要先将文件页从磁盘拷贝到页原创 2020-06-03 11:48:57 · 1138 阅读 · 0 评论 -
android测试
1、获得context的方法首先需要在我们工程的build.gradle中添加如下配置:android { defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" }}这里实际上只做了一件事情,就是为我们的工程指定一个TestIns...原创 2020-04-19 22:45:16 · 421 阅读 · 0 评论 -
Dagger2学习
什么是Dagger2Dagger是为Android和Java平台提供的一个完全静态的,在编译时进行依赖注入的框架,原来是由Square公司维护,现在由Google维护。我们知道Dagger是一个依赖注入的框架,那么什么是依赖注入呢?我们在activity中有可能会用到很多很多的类,这些类要在activity中进行实例化,这样就导致我们的activity非常依赖这么多的类,这样的程序耦合非常...原创 2020-03-31 16:35:09 · 225 阅读 · 0 评论 -
Android动态加载机制
Android能够实现动态加载机制,得益于java虚拟机团队设计的类加载,把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何获取所需要的的类,实现这个动作的代码模块称为“类加载器”(参考《深入理解Java虚拟机–JVM高级特性与最佳实践》7.4类加载器)。一、Android中的ClassLoaderJava中的C...原创 2020-03-24 16:50:08 · 511 阅读 · 0 评论 -
android自定义ViewGrop、View与事件分发
一、自定义view实现这样一个自定义布局:下面红色和绿色的是自定义ViewGrop,最上层的蓝色的是自定义View.先自定义一个viewgroup,省略部分无关代码,命名ViewGropA:public class ViewGroupA extends ViewGroup { @Override protected void onMeasure(int widthMea...原创 2020-03-20 14:48:38 · 354 阅读 · 0 评论 -
为什么Android不建议activity之间用static传值
一般来说,在Android开发中都会用intent来传值,但是遇到数据量很大的时候,可能还要序列化才可以,这样反而增加了开销,为什么不直接用static来传值呢?如果在activity中写一个static变量来访问的话,这是大忌,可能导致该activity不能被回收,造成内存泄漏。那如果我新开一个类专门用来传递static变量呢?答案也是不行!首先静态变量不容易被回收,伴随着整个进程,如果当...原创 2020-03-12 17:10:19 · 1123 阅读 · 3 评论 -
h5、微信、app互相跳转
1、微信h5 -> app 白名单、应用宝或者系统浏览器ios通过黑科技Universal Links绕过微信直接打开app,不知道会不会被封2、app -> 微信h5 分享3、h5 -> app scheme4、app -> 微信小程序 接入SDK5、微信小程序 -> app 跳回...原创 2019-12-10 17:22:28 · 327 阅读 · 0 评论 -
android自定义键盘
其实对于简单的键盘,比如数字键盘这种,使用自定义view即可,这里为了学习android的键盘知识,继承android系统键盘。先看效果图:一、在res/xml目录下新建一个键盘布局文件<?xml version="1.0" encoding="utf-8"?><Keyboard xmlns:android="http://schemas.android.com/apk...原创 2019-11-29 10:58:42 · 967 阅读 · 0 评论 -
Android如何避免WebView内存泄漏
Android如何避免WebView内存泄漏什么是内存泄漏内存泄漏通俗的讲就是你创建了一个对象,却没有在合适的时候销毁他,他一直存在在内存中耗费了内存空间.为什么WebView会内存泄漏webView内部的一些线程持有activity对象,导致activity无法释放。继而内存泄漏。如何解决不要在布局中直接初始化 webview,而是在需要的时候在 Activity 中动态创建 we...原创 2019-10-21 14:41:33 · 1182 阅读 · 0 评论 -
android指纹识别
需要注意:1、取消指纹识别之后,再不能重新调用每次调用fingerprintManager.authenticate()方法的时候,CancellationSignal这个参数需要重新new一个,不然取消之后fingerprintManager.authenticate()无效。...原创 2019-10-16 17:42:34 · 265 阅读 · 0 评论 -
android可暂停的录制视频
前一篇文章讲了用前置摄像头录制视频保存到本地,Camera+MediaRecorder实现,关于录制相关的内容,详见这篇文章《android前置竖屏摄像头录制视频保存到本地》现在遇到一个新的需求,需要一个暂停和恢复录制的功能,so easy,找到暂停和恢复录制的API调用就是了嘛,找了半天发现没有找到,百度一下才发现根本就没有这样的API,也就是说android系统没有提供暂停录制的功原创 2016-10-20 15:45:58 · 3140 阅读 · 0 评论 -
离线安装使用github
官方下载的文件是要在线安装的,要下载120多M,出于众所周知的原因,通常下载到一部分就失败了。其实,下载一个离线包直接安装就行了,亲测可用,目录如下:http://download.youkuaiyun.com/detail/yu75567218/9672184载后解压,直接运行GitHub.application即可。使用文章参考:http://www.cocoachina.com/ios/原创 2016-11-03 17:36:33 · 813 阅读 · 0 评论 -
手机录屏并转换成gif动图
手机连接电脑,用android studio就可以录屏了,不用下载任何软件,如下图所示:视频转gif动图的工具找了几个都不行,最后终于找到一个能用的,百度:movietogif。使用方法:第一步:选取原始视频。点击“打开视频”按钮,选取视频文件。支持各种常用视频格式,如:AVI, MPEG, MP4, WMV, MKV, MOV, VOB, RMVB等。第二步:截取视频片段原创 2016-11-03 17:39:30 · 3618 阅读 · 0 评论 -
android实现牛顿摆
上次看到一个小伙伴实现了牛顿摆,发现挺有意思的,于是乎自己也想着做一个,虽然说是重复造轮子,我看中的是这个过程,顺便巩固一下自定义view,并且我做了一个扩展,可以自定义线和小球的尺寸与颜色,还有初始角度。效果图如下:其实通过做这个项目可以扩展学习到很多姿势,首当其冲的就是物理姿势(我发现我连重力加速等于多少都忘了,so sad)。通过一步步推算得出角速度与偏移角度的公式(在线编辑数学原创 2016-11-03 17:52:11 · 1474 阅读 · 0 评论 -
AIDL使用
AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言。支持这些基本数据类型byte、short、int、long、float、double、boolean、char、String、CharSequence,如果使用其他数据类型,则需要定义(本文不做介绍)。AIDL是跨进程通信,可以说是两个不同应用间的通信,下原创 2016-10-13 18:01:12 · 319 阅读 · 0 评论 -
android打开其他应用的activity并返回数据
需求是应用A打开应用B的登录界面,在应用B输入QQ号,然后返回给应用A。打开其他应用activity的核心类是:ComponentName,构造参数有两个,一个是要打开的应用包名,另一个是要打开的activity。在应用A中打开应用B的代码:ComponentName componentName = new ComponentName("com.example.droidplu原创 2016-10-14 14:36:09 · 3057 阅读 · 0 评论 -
SurfaceView学习
定义Surface意为表层、表面,顾名思义SurfaceView就是指一个在表层的View对象。为什么说是在表层呢,这是因为它有点特殊跟其他View不一样,其他View是绘制在“表层”的上面,而它就是充当“表层”本身。特点SurfaceView,它拥有独立的绘图表面,即它不与其宿主窗口共享同一个绘图表面。由于拥有独立的绘图表面,因此SurfaceView的UI就可以在一个独立的原创 2016-10-25 15:47:08 · 345 阅读 · 0 评论 -
解决SurfaceView预览Camera拉伸问题
在android中实现录制视频时,都会要求实现一个视频预览的功能(一般都是全屏预览),实现方式就是用SurfaceView来实时显示Camera传递过来的图像。但是我们都知道,android手机的屏幕尺寸千奇百怪,使用默认的预览尺寸,部分手机会导致SurfaceView显示时图像拉长,整个人的脸看起来比驴脸还长;如果设置Camera的预览尺寸为屏幕尺寸,那么如果刚好Camera不兼容这个尺寸,原创 2016-10-25 16:03:31 · 17504 阅读 · 1 评论 -
android前置竖屏摄像头录制视频保存到本地
使用前置摄像头录制竖屏的视频并且保存到SD卡,大致步骤如下:1、申明权限:前两个是录像和相机使用权限,后两个是操作文件权限。2、布局<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" andr原创 2016-10-18 17:16:28 · 3762 阅读 · 2 评论 -
build gradle project info很久
在用android studio打开其他AS项目时,有时候打开过程很久,因为AS使用gradle编译项目,需要下载项目配置的对应gradle版本,由于众所周知的原因,下载会很慢,这个时候我们可以翻墙,也可以利用本地已经下载好的其他版本的gradle。1、用project模式打开项目,打开gradle/wrapper目录下的gradle-wrapper.properties文件,看到里面有这句:原创 2016-09-29 16:53:51 · 3634 阅读 · 0 评论 -
gradle和groovy
我是学习一篇优快云博客,然后总结的这篇笔记,直接看这篇笔记可能会云里雾里,所以请先参考原文:http://blog.youkuaiyun.com/innost/article/details/48228651gradle基础:1、使用groovy语言,groovy继承自java;2、是一种DSL(领域相关语言),如《智取威虎山》中的行话。3、gradle project-path:tasks ,查看P...原创 2016-09-25 14:37:05 · 663 阅读 · 0 评论 -
android的adapter复用与getItemViewType
在使用ListView的时候,我们都知道item会复用,当有多种类型的item时,需要利用getItemViewType()方法来区别item的种类,以便对应不同的item布局。public class PostAdapter extends MyBaseAdapter implements View.OnClickListener{ private int TYPE_POST =原创 2016-09-16 14:21:53 · 1195 阅读 · 0 评论 -
Android:完美解决ScrollView嵌套GridView
在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便会出问题,即GridView会显示不全。解决办法,自定义一个GridView控件。转载 2016-09-01 15:19:44 · 1856 阅读 · 0 评论 -
ListView异步加载图片混乱问题
ListView加载多个图片的时候,图片是异步加载的,当item数量多于一屏时,滑动ListView,后面的item在加载图片的时候会混乱。问题原因是ListView的item复用问题,ListView不会每次都去创建新的item,而是尽量复用之前的item,这就会导致item上图片混乱的问题,也许image对应的position已经改变了,但是它还是去加载以前的bitmap,所以我们要保原创 2016-08-15 13:22:55 · 620 阅读 · 0 评论 -
android多图片缓存
在android的ListView或者GridView中加载大量图片是非常痛苦的,特别是从网络或者其他地方异步加载,需要一个下载的过程,不可能每次滑动页面都要去重新下载图片,这时候缓存就显得尤为重要了。我的需求是:显示所有视频的缩略图,并且显示视频时长。获取视频缩略图的代码:public static Bitmap getVideoThumbnail(String filePath)原创 2016-08-15 13:16:14 · 354 阅读 · 0 评论 -
activity从底部弹出动画
要实现activity从底部弹出的动画,一般参考这篇博文就能实现:http://blog.youkuaiyun.com/spy19881201/article/details/5861193但是我的需要还有点特殊,同一个activity,在正常情况下是按系统默认的方式打开,但在特殊情况下(收到通知后点击打开该页面)是从底部弹出的,所以就不能在xml文件中写死theme属性,如果用java代码实现也有问原创 2016-08-02 11:33:00 · 9029 阅读 · 1 评论