
安卓开发进阶
文章平均质量分 70
不二程序员
热爱编程,也热爱生活。
展开
-
Android原生计步功能的实现,记录当日步数(仿微信运动),不需要后台service
Android原生计步功能的实现,记录当日步数(仿微信运动),不需要后台service概述:通过调用Android4.4以上系统自带的计步传感器Sensor.TYPE_STEP_COUNTER,实现记录当日步数的逻辑,不需要后台service,因自带计步传感器记录的是开机以来所有的步数,所以需要自己处理跨天分割以及开关机的问题。1.封装了StepUtil供外界调用 /** *...原创 2019-11-04 14:09:33 · 6590 阅读 · 15 评论 -
安卓原生自定义的埋点统计功能的实现(仿友盟统计)
仿友盟统计安卓原生自定义的埋点统计功能的实现一般的统计需求我们直接通过友盟统计或者talkingdata等第三方的SDK就能满足,但是如果统计的维度较多,参数需要自定义等情况,并且需要上传数据至自己公司后台的情况下,这时候就只能进行自定义了。以下为自定义的埋点统计的工具类,核心代码如下:package com.xx.xx.utils;import android.content.Conte...原创 2019-10-25 15:29:54 · 1514 阅读 · 2 评论 -
Android仿微信发起群聊的列表样式
场景:今天一个朋友微信找我说碰到个问题让我看下,就是仿微信发起群聊的那个列表样式,其实这个功能实现起来没什么困难的地方,但是他遇到的问题是,最后的那个“搜索”,随着前边列表的增加或删除动态的移动,他不知道怎么处理,我就帮忙看了下。其实网上也有类似仿微信发起群聊的文章,但是都是那个“搜索”固定在右侧的,所以这里需要特殊处理下。方案: 列表的样式,通过使用RecyclerView来实现 最后的...原创 2018-04-24 18:57:16 · 1882 阅读 · 1 评论 -
Android屏幕适配之加载网络图片的适配攻略
关于Android的屏幕适配方案网上有很多很多,很多大神讲的很全面也都很好,所以这里我就不班门弄斧了,这篇文章主要介绍安卓开发过程中加载网络图片(本文中加载图片的类库为Picasso),布局中ImageView不同宽高展示的适配方案,主要分为以下三大类:一、ImageView宽度小于屏幕宽度的(即原图宽高确定,且在原型图中宽高有明确标注的),比如item中的一个图片元素,或者其他布局情况下的一...原创 2018-04-19 16:29:53 · 2670 阅读 · 0 评论 -
解决Android7.0目录访问的异常Caused by: android.os.FileUriExposedException: file:
场景:正在开发的应用中有分享这样一个功能,这个分享是需要先把一篇pdf格式的文章下载到本地,然后再去进行分享的操作,在Android7.0之前都没有问题,但是7.0及以后的版本就会报这个异常,其实不止这一个场景,在其他需要访问目录文件的场景,也是会报这个异常原因:从Android7.0为了提高私有文件的安全性,面向Android N或更高版本的应用私有目录将被限制访问,也就是说从Andro...原创 2018-04-12 16:41:13 · 798 阅读 · 0 评论 -
Android开发中控制ScrollView直接滚动到顶部或底部
场景:开发的过程,如果一个页面子View比较多,一个屏幕放不下,此时我们大多会采用ScrollView来实现。然后产品可能会提这种需求,比如某个子View在最底部,产品想要页面进入就直接滑到最底部;或者是当页面滑到最底部时,点击某个按钮直接滑到顶部。还是先呈上方法,然后再来具体分析mScrollView.fullScroll(ScrollView.FOCUS_UP);//滑到顶部mScr...原创 2018-04-11 18:45:18 · 4719 阅读 · 0 评论 -
完美解决部分安卓手机调用系统拍照上传时图片旋转问题
实际开发中我们经常会有拍照上传图片,或者上传头像的需求,但是经常会发现部分手机,例如三星等,拍照后的图片会产生不同角度的旋转,原因是这些手机拍照后会有一个自动旋转的过程,具体解决思路也很简单,我们来看下具体代码://首先我们先获取当前图片的旋转角度 public static int readPictureDegree(String path) { int degree原创 2018-01-26 15:10:57 · 6556 阅读 · 0 评论 -
完美解决三星手机拍照后横竖屏切换导致的回调为null以致程序崩溃的问题(包括三星note3的特殊适配)
场景:安卓开发中我们经常会有拍照上传的需求,比如上传图片,或者上传头像等等,方法也比较常规,通过调用startActivityForResult(Intent intent, int requestCode)方法调起系统的拍照,然后在onActivityResult(int requestCode, int resultCode, Intent data)方法中对回调结果进行处理。相信很多同学会遇原创 2018-01-26 16:54:04 · 1368 阅读 · 1 评论 -
View的事件体系之View的位置参数
如图所示,为View的位置坐标与父容器的关系图,此图来源于老任的《Android开发艺术探索》这本书, 感兴趣的同学可以去看下,以此我们来简单介绍下View的位置参数的相关知识。 首先是4个基本属性top、left、right、bottom 如图,这几个属性,都是View相对于父容器的信息 top:左上角的纵坐标 left:左上角的横坐标 right:右下角的横坐标 bottom:右原创 2018-01-22 18:00:13 · 346 阅读 · 0 评论 -
从Android源码入手解决ScrollView与内部控件的滑动冲突问题
如图所示,父布局是一个ScrollView,内部一个子View-SelectView是一个自定义的水平滑动的View,当手指放在SelectView上左右滑动时,会与ScrollView的上下滑动事件产生冲突。平时我们也会碰到类似的这种ScrollView与内部控件的滑动冲突问题,比如嵌套ListView等等,先来说说如何解决吧SelectView.setOnTouchListener(n原创 2018-01-22 17:36:30 · 2658 阅读 · 0 评论 -
安卓开发异常rx.exceptions.OnErrorNotImplementedException: Must be called from main thread of fragment host
rx.exceptions.OnErrorNotImplementedException: Must be called from main thread of fragment host异常提示:必须在主线程中执行异常描述:我在执行某个操作时出现的异常,类似跳转到首页等的页面跳转异常解决方案:创建一个线程,在创建的线程里面执行原来想要执行的代码,new 一个handler调用post发送消息原创 2016-11-28 11:36:53 · 9321 阅读 · 1 评论 -
AndroidManifest清单文件合并失败 Error:Execution...Manifest merger failed with multiple errors, see logs
Error:Execution failed for task ‘:app:processDebugManifest’.> Manifest merger failed with multiple errors, see logs异常提示:清单文件合并失败 异常情形描述:更换极光推送的JPUSH_APPKEY导致(或在其他更改清单文件配置的情况下也可能会出现) 解决方法一:too原创 2016-12-09 11:44:56 · 4860 阅读 · 0 评论 -
android获取app当前的渠道号或者获取清单文件application中的任意meta-data(以友盟的多渠道打包为例)
android获取app当前的渠道号或者获取application中的任意meta-data(以友盟的多渠道打包为例)/** * 获取app当前的渠道号或application中指定的meta-data * * @return 如果没有获取成功(没有对应值,或者异常),则返回值为空 */public static String getAppMetaData(Context context,原创 2016-11-23 11:20:13 · 9882 阅读 · 4 评论 -
App强制更新时,点击进行下载的逻辑,分为调用原生浏览器下载和自定义显示进度条下载两种
方法一:点击后跳转到调用原生浏览器下载Uri uri = Uri.parse(upDataUrl);//直接调用原生的浏览器进行下载的方法Intent intent = new Intent(Intent.ACTION_VIEW, uri);startActivity(intent);getActivity().finish();方法二:自定义的显示进度条下载(不依赖App本身的网络请求框架原创 2016-11-16 14:37:20 · 1884 阅读 · 0 评论 -
实现app的重启或重新打开
1.实现app的重启逻辑Intent i = context.getPackageManager() .getLaunchIntentForPackage(context.getPackageName());i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);context.startActivity(i);android.os.Process.kil原创 2016-11-16 11:53:39 · 2348 阅读 · 0 评论 -
简单介绍MVC、MVP和MVVM模式
说到这三个框架,应该说是所有做安卓开发的童鞋都会用到的,之前在github上看到一位大神写的相关的demo,觉得用的非常好,在此我介绍下我对这三个框架的理解:MVCMVC,Model View Controller,是软件架构中最常见的一种框架,简单来说就是通过controller的控制去操作model层的数据,并且返回给view层展示,当用户出发事件的时候,view层会发送指令到control原创 2016-08-30 17:23:12 · 685 阅读 · 0 评论