
Android
z2wenfa
这个作者很懒,什么都没留下…
展开
-
Cordova加载远程URL的相关配置
前言最近在使用Cordova开发应用,我的主要工作是提供一个Android的壳,并提供一些原生方法的插件让前端可以调用,正常情况下,每次发包,我们都需要将前端的文件放入assets文件夹下的www目录下,但是这样会带来一个问题,那就是如果前端有改动的化,Android端需要频繁的进行发包,这样就很麻烦了,上线后如果前端有Bug也不能实时的更新应用,于是我们就考虑直接去访问前端的URL路径不就行了。直接使用前端部署后的URL后出现的问题解决1. 直接访问远程URL于是我们MainActivity的on原创 2020-06-27 12:23:25 · 2148 阅读 · 2 评论 -
Cordova如何让继承的Activity正确全屏的方法
使用android常规的全屏操作都不能正常让Activity全屏,着实让人纳闷,最后看了看CordovaActivity源码,发现onCreate()方法中其实预留了设置全屏的代码: if (!preferences.getBoolean("ShowTitle", false)) { getWindow().requestFeature(Window.FEATURE_NO_TITLE); } if (preferences.getBo原创 2020-05-30 11:39:20 · 415 阅读 · 0 评论 -
灵活利用泛型的MVP模式T-MVP(附带一个快速创建MVP接口的Android Studio插件-TMVPHelper)
接触到MVP模式已经挺长时间了,好几个月T-MVP我就了解到了,觉得挺有想法的,于是直接就用到了这次项目里,用起来感觉还行,就花时间推荐一下吧。大家都知道MVP模式都有的几个接口Model,View,Presenter,另外还有一个用于用于存放这几个接口Contract契约类。先看项目的机构吧原创 2016-10-21 10:29:41 · 9888 阅读 · 1 评论 -
Gradle中的配置与多版本开发
一.BuildConfig全局变量的定义二.manifest中变量的动态配置三.buildtype和productflavors的设置四.打包时签名的设置五.打包时apk名称的自定义六.gradle中的def 定义变量的使用七.通过productflavors进行多版本开发原创 2017-03-05 23:18:04 · 2259 阅读 · 0 评论 -
一个带下拉列表的EditText--SpinnerEditText
工作中我们常会有时候会有一个需求,下拉框中由于选项实在太多,于是就希望能够添加模糊匹配的功能,于是我便封装了一个可以模糊匹配的下拉编辑框。先看下效果吧:简单说下实现哪些功能吧:1.不需要使用下拉选择时,可以完全当作EditText进行使用。右侧封装了一个图标,可以自己替换想要的图标,并且重写图标的点击事件(默认是弹出下拉列表)。2.当下拉列表的数据不为空时可以根据编辑框输入的文本过原创 2017-04-03 09:35:52 · 7506 阅读 · 14 评论 -
一次使用Android Studio的Git工具解决疑难杂症的经历
最近遇到了一个特别奇怪的问题,原创 2017-05-04 22:32:33 · 1082 阅读 · 0 评论 -
使用zbar库对预览界面进行裁剪解码时遇到的坑
前言: 最近在做扫码的功能,使用了很多的库,从最开始的Zxing到Zbar,再到各种基于这两个库的开源扫码库,非常的折腾,其中经历了各种各样的坑,真是一把辛酸泪...有些虽然封装的很好,很成熟,但是性能上又不能够满足我的要求(解析速度不够),最后经历层层波折找到一个ZBAR的封装库,性能很不错(当时我就感觉找到了救星),但是demo是只能扫一个码,出现多个条码时因为没有裁剪解析区域所以总是会原创 2017-06-19 13:34:01 · 1018 阅读 · 0 评论 -
FrameLayout的onMearsure()与onLayout()源码浅析
前言之前一直对View绘制过程只知道个大概,最近看了扔物线的视频,突然来了兴趣,于是找了一个比较简单的ViewGroup来分析下源码,巩固下理解。onMeasure @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int count = g原创 2018-01-24 16:18:23 · 617 阅读 · 0 评论 -
利用多进程应对集成第三方模块时App的闪退
当我们做一个平台类型的应用时,我们在开发平台需要的功能模块的同时,可能还需要提供集成其它第三的应用的能力,这些方式我们可以采用模块化或者插件化的方式,目前已经出现了不少的开发方案,这些不是我们今天的主题,有兴趣的可能百度看看。 当我们集成了第三方的功能模块时,这时就可能遇到一个问题-第三方的功能模块可能出现了异常导致平台App也跟着奔溃了,这是给用户的体验非常的不好,后台收集的Bug信息立刻就推原创 2018-01-17 16:23:21 · 472 阅读 · 0 评论 -
Rxjava2源码浅析(一)
前言一直对Rxjava的实现很好奇,这次刚好有时间就看下它的源码,并把其中的思路记录下来,加深印象。先是看了其它人的分析后自己又去看了源码,说实话源码还是蛮绕的,可能自己还是对观察者模式理解的不够深刻吧…这次主要了解三点: 1. 知道源头(Observable)是如何将数据发送出去的。 2. 知道终点(Observer)是如何接收到数据的。 3. 何时将源头和终点关联起来的。原创 2018-02-02 15:30:56 · 263 阅读 · 0 评论 -
Activity的生命周期与启动模式
Activity可以说是我们平常使用最多的组件了,虽然使用起来似乎很简单,但是如果深入了解的话,其实还是有很多需要我们注意的地方的。Activity生命周期正常情况下的生命周期Fragment的生命周期Activity和Fragment的生命周期之间的关联看完上面的图,我们大致对生命周期有了一个认识,可以看到生命周期基本都是两两对应的。onCreate()与onDestory...原创 2018-09-18 16:28:33 · 362 阅读 · 0 评论 -
Android事件分发机制与嵌套导致触摸事件冲突的解决方案
实现滑动的常用方法通过scrollTo()、scrollBy()来进行滑动使用Scroller来进行滑动 @Override public boolean onTouchEvent(MotionEvent event) { case ACTION_UP: scroller.startScroll(getScrollX(...原创 2018-09-24 14:59:46 · 1126 阅读 · 0 评论 -
跨进程通信(IPC)
跨进程通信(IPC)-Inter-Process CommunicationAndroid多进程的使用场景例如:车联网这类牵涉到系统定制的话,对于多进程的使用应该还是很多的,说的比较简单的例子,一个应用商店App,就需要通过IPC通知Launcher下载的apk处于什么样的状态,Launcher能够实时的更新下载安装的Apk的图标状态。应用使用Service播放需要通知前台Activit...原创 2018-09-19 21:39:17 · 2049 阅读 · 0 评论 -
Android优化相关总结
内存优化内存优化的几种方法:需要使用多少内存申请多少内存。比如实例化数组大小。创建Map时如果Key值支存在Int类型的话可以尝试使用SparseArray。加载图片的时候,在不需要特别高画质的情况下可以采用压缩或者使用占用内存较小的图片格式,如默认的图片格式是ARGB_8888可以换成RGB_565。对象不再使用之后及时进行回收与关闭。比如Bitmap,一般Bitmap占...原创 2018-10-01 13:07:20 · 258 阅读 · 0 评论 -
Activity启动流程分析(Android 9.0)
本文的重点是总结Activity启动过程中的几个关键点与相关逻辑所在的源码位置,具体的启动流程调用链真的很长,所以我还是按照我之前的方式来做,带着问题去找相关的代码逻辑。Activity的启动流程应用通过startActivity或是startActivityForResult方法向ActivityManagerService发出启动请求。ActivityManagerService...原创 2019-07-10 02:22:45 · 990 阅读 · 0 评论 -
Android自定义View总结-动画篇
自定义View知识结构图形绘制布局触摸反馈动画属性动画执行过程ValueAnimator设置数值变化区间根据Interpolator获得动画执行进度根据Evaluator获取对应进度的数值通过AnimatorUpdateListener手动获取返回的数值对动画执行对象的属性进行赋值ObjectAnimator视图动画通用属性durationfi...原创 2019-08-08 10:03:10 · 237 阅读 · 0 评论 -
Android自定义View总结-绘制篇
图形绘制四个阶段一. Canvas常用图形绘制方法和Paint基本API二. Paint详解颜色效果drawText()相关初始化三. Canvas对绘制的辅助–范围裁切和几何变换四. 图形绘制顺序的控制一、 绘制基础Canvas图形绘制API:drawColor:绘制背景drawLine:绘制直线drawPoint:绘制点drawPath绘制路...原创 2019-08-09 21:57:16 · 563 阅读 · 0 评论 -
发布库到jcenter中所遇的坑与解决方法
原本以为上传一个库到jcenter应该不难,但是没想到遇到了这么多坑,把很多事情都给耽误了.坑一:bintray注册的问题.我是直接使用github登陆的结果我github的primary email是我的163邮箱,bintray注册邮箱总是不过,只能去注册一个gmail邮箱了,但是我大天朝的国情大家都是知道的,只能翻墙,开始真的不想使用vpn于是先修改host,申请了一个gmail原创 2016-10-31 11:14:46 · 3573 阅读 · 2 评论 -
Activity与Fragment通用的跳转工具类JumpUtil的实现
工具类由来:每次跳转到其他的Activity我们都要实例化一个Intent,有时为了传递数据还要实例化一个Bundle,这些代码说多不多但是说少也不少,于是我便想着如果能够将跳转的功能封装一下,是不是就能够稍微偷点懒呢?封装思路:根据实际开发经验跳转常用的有这两种方式:1.不带任何数据直接跳转到另外一个Activity.2.需要通过Bundle带一些数据到另外一个Activit原创 2016-09-20 11:56:18 · 1590 阅读 · 0 评论 -
通过PackageManager得到版本信息
//得到PackageManager对象PackageManager packageManager=this.getPackagerManageer(); //得到PackagerInfo对象 getPackagerName()得到PackagerName 0:代表获取版本信息的flagPackagerInfo packInfo=packagerManage.getPackagerIn原创 2015-08-03 14:12:17 · 602 阅读 · 0 评论 -
通过ActivityManager得到当前界面是否是某个activit
ActivityManager activityManager=(ActivityManager)Context.getSystemService(Context.ACTIVITY_SERVICE);//得到当前活动的task内的所有集合List tasks = am.getRunningTasks(1);//得到Task最上层的Activity对象ComponentName原创 2015-08-03 14:25:11 · 876 阅读 · 0 评论 -
AudioManager的简单使用
//得到AudioManager对象AudioManager audioManager =(AudioManager)getSystemService(Context.AUDIO_SERVICE);//得到AudioManager的最大音量int maxVolume=audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);//得到Aud原创 2015-08-03 13:39:07 · 447 阅读 · 0 评论 -
Genymotion常见问题的解决方法
1.尝试重新设置虚拟机ip(网上教程很多一般会出现DHCP字样);2.win7主题导致修改的问题(解决方法为下载主题还原工具)3.不能够加载镜像(一般会出现ova字样),我在win10中出现过一次,解决方法为右键以管理员权限运行。原创 2015-10-23 00:32:48 · 757 阅读 · 0 评论 -
gridview选中效果的实现,选中的改变背景。同时只有一个能被选中
这几日做项目,一直想要实现这种效果,但是尝试了gridview的item的各种listener都没有得到应有的效果,使用click事件,虽然点击得分改变了背景,但是点击其他的,之前被点击的却不能恢复之前的背景,故看了看前辈之前实现的代码,瞬间感觉拨云见日,茅塞顿开。大致的思路是这样:1.在传入的List的对象中添加一个一个是否被选中的属性。2.在baseadapter中的getview原创 2015-09-22 22:27:30 · 3146 阅读 · 4 评论 -
让fragmentTabhost这类固定的bar能够滑动起来
最近,做了个项目同事使用了FragmentTabhost来作为软件的底部的选择类似actionbar的功能,点击不同的按钮加载不同的fragment,但是老板希望能够让他能够滑动起来,原本想的很简单,准备直接加个scrollview来实现,实际做起来发现,scrollview 的Touchevent被拦截了无法获取,查了下资料顺便回顾了一下android的拦截机制,故决定从高层的分发入手自己实现一原创 2015-09-22 21:31:16 · 1298 阅读 · 0 评论 -
通过interface进行回掉的实现
最近写项目,用了很多的fragment嵌套,故涉及到了fragment的通信,虽然使用广播也能实现,但是实在有点大材小用,直接使用interface来实现就行。思路如下:1.定义接口。2.数据传递者:1.声明一个接口的变量2.写个public 的setXXX()方法给这个接口实例化3.调用接口的的方法将需要传递的变量传入。3.数据接收者:1.实现该接口,重写要实现的原创 2015-09-22 22:46:54 · 314 阅读 · 0 评论 -
一些第三方库
什么事情都自己去做的后果就是要么效率不够,要么做出来的东西不尽人意。所以使用一些第三方库也是很必要的。下面我就总结一下遇到的第三方库,希望以后能够提高自己开发的速度。1,android-async-http-1.4.5.jar:封装了http异步请求的库 很方便但是android6.0好像就有兼容问题了。2.android-logging-log4j-1.0.3.jar原创 2015-11-23 22:21:07 · 486 阅读 · 0 评论 -
百度地图开发 status: 230 message: APP Scode码校验失败 android studio解决方法
该问题的出现是由于一下几个原因造成:1.ak版本类型不正确,刚开始没有注意直接选择了服务器的版本,虽然百度定位还是能用,但是百度地图移动的时候不能自动刷新。2.android studio中的包名和sha1值没有设置成百度ak中的,特别注意改过包名之后build.gradle中的defaultConfig中的包名也要改掉。原创 2015-12-01 00:17:41 · 5161 阅读 · 0 评论 -
android中Parcelable接口的实现
android中基本类型直接就可以使用bundle来传递,但是如果是对象那么就得使用其他的方式了,一般2种方法:一.直接serializable就能通过bundle来传递,此种方式很简单,但是效率没第二种高。二.实现Parcelable接口:大致流程如下:1.实现Parcelable2.重写2个方法:(1)@Overridepublic int describeCon原创 2015-12-01 00:30:51 · 454 阅读 · 0 评论 -
fragment中startActivityForResult接收不到的几种常见原因
今天在fragment中调用startActivityForResult() OnActivity()中死活接收不到 最后总结了主要是以下几个原因:1.intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 的原因2.onActivityResult() fragment中接收不到还可能是因为 没有使用fragment中的startAct原创 2015-12-19 11:33:45 · 1180 阅读 · 0 评论 -
真机调试时使用自己的key运行程序
1.做百度地图的时候必须得key和包名对应才能有用 但是原创 2016-03-24 11:11:01 · 404 阅读 · 0 评论 -
Android中Camera开发各种奇奇怪怪问题的解决
http://www.jianshu.com/p/f269bcda335f转载 2016-08-03 23:35:32 · 891 阅读 · 0 评论 -
使用Bmob遇到的坑与解决办法
先说下为什么使用Bmob:准备开发一个自己使用的小工具,直接在别人的开源代码进行的开发,这个项目只有本地数据的存储,我想加个网络存储的功能,因为之前听朋友说过Bmob,于是便选择使用它了。坑一:依赖包出现了冲突于是我便按照官网的文档使用Android Studio一步步添加依赖,所有都弄好了,一编译发现Bmob依赖的库与之前添加的Rxbinding依赖的Rxjava库出现了冲突原创 2016-10-12 10:44:07 · 13547 阅读 · 1 评论 -
另一种思路下的低耦合易封装权限请求库-PermissionRequester
先说下这个权限请求库能够做到的事情: 1.能够直接在请求结果回调里得到哪些权限被授予,哪些权限被拒绝,本次请求的权限是否全部被授予。 2.能够容易的在基类里进行封装,对拒绝方法进行统一的处理。3.耦合比较小,适合从低版本sdk升级到6.0的朋友。原创 2016-11-06 10:02:45 · 916 阅读 · 0 评论 -
RxAndroid 进行封装实现替代Handler的方案
概述.在android中如果我们开启了一个新的线程,但是执行完毕之后需要更新UI我们一般使用Handler来操作,这样就出现了2个问题:1.只要需要在ui线程中执行ui更新 我们就需要在Activity中创建一个Handler对象,同时我们还需要创建Message来发送,同时还需要在Handler中进行判断,这样代码的可阅读性就降低很多了,而且代码编写起来也很烦。2.需要异步执行任务时如果原创 2016-04-28 18:50:06 · 6269 阅读 · 4 评论 -
Vitamio的最简单Demo-MediaPlayer
1.在布局文件中添加Vitamio的布局显示代码:<io.vov.vitamio.widget.CenterLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >原创 2015-06-28 22:50:20 · 1585 阅读 · 1 评论