Android
天空还是那么蓝
在网易、百度、美团都工作过,安卓高级开发工程师
展开
-
Button跟随在RecyclerView底部
让按钮跟随RecyclerView底部,当RecyclerView数据过多,按钮置底。原创 2022-07-19 13:41:13 · 670 阅读 · 0 评论 -
okhttp3 get请求支持Body
okhttp3 的get请求如何支持Body?回答这个问题之前,首先http协议并不建议在get请求加body,意思是既然...原创 2022-05-23 17:28:36 · 5405 阅读 · 2 评论 -
Android Studio出现NoClassDefFoundError: javax/xml/bind/JAXBException
1.问题:Android Stuido出现编译过程,出现错误:java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException2.原因是:Java 11删除了这个API3.方法:降低JDK版本到JDK 1.8。下载openjdk 1.8,然后再Android Studio里选择此路径。...原创 2022-03-25 10:44:24 · 4185 阅读 · 0 评论 -
Flutter Text自动换行,全网独一份
网上搜不到,长时间探索,得出的结论,不容易。1、问题介绍Flutter的Text默认不支持自动换行,如果文字过长,会溢出到屏幕之外。例如这样的布局,此时Text换行失效:Row->Column->Text2、如何实现换行?(1)找到Text被包裹的所有Row(必须是Row),在Row内部,使用Expanded包住里面的元素(只包裹住通往Text那条线上的元素就行)(2)同时为Text套一个约束盒,ConstrainedBox,指定一个最大高度就好了。这样解决了原创 2022-01-28 11:39:24 · 12114 阅读 · 1 评论 -
支付宝恶意拉起日活?奇怪的NFCEntry页面
我在测试Android uri调起时,无意间使用通过intent打开https://xx.com,发现竟然带起了支付宝NFC页面。每次我写错url时,都会调起支付宝的NFC页面。后来反编译支付宝apk,看了一下com.alipay.mobile.nfc.ui.NFCEntry声明真相大白了,原来的这个页面,只匹配的https。也就是当https uri匹配不到后,系统会尝试匹配scheme部分,这样就匹配到了NFC页面。<data android:scheme="htt原创 2020-11-19 15:33:06 · 669 阅读 · 0 评论 -
鸿蒙AGPContainerView
鸿蒙开发过程,在所有鸿蒙组件,最终是画在了AGPContainerView上,AGPContainerView其实就是SurfaceView,为了兼容安卓,才这样做的。相当于所有组件都画在了SurfaceView的Canvans里,坐标从Activity获取,可以确定落在位置SurfaceView的哪个位置。...原创 2020-11-09 14:42:29 · 747 阅读 · 0 评论 -
Java的序列化和反序列化,我所遇到的坑
有时需要为对象做持久化,就是把内存里的对象保存到磁盘(暂且叫做磁盘吧,可以等同于sp、db、文件、网络等)上,等以后需要这个对象的时候再从磁盘上还原到内存,因此需要序列化和反序列化。坑1、类里面一定要serialVersionUID,否则旧数据会反序列化会失败。serialVersionUID是根据该类名、方法名等数据生产的一个整数,用来验证版本是否一致。如果不加这个字段,原创 2017-01-19 18:04:14 · 11657 阅读 · 0 评论 -
Android N 分屏适配
Android N就是Android7.0,虽然没有用过Android N,但是公司要求适配Android N,主要需要适配分屏,我进行了一番探索。当app切换/恢复分屏或画中画状态时,Activity会回调下面的方法:@Override public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {原创 2016-11-10 20:14:29 · 6205 阅读 · 2 评论 -
查明某个方法被那个方法调用了
今天在工作中,没有更改任何代码,但是出现了bug,之前版本是没有的,说明肯定别人修改某些东西导致的。bug是这样的:Activity横屏播放视频时,由于网络错误,当重新开始播放视频的时候,activity被强制改为竖屏了。为了确定是那个方法搞的鬼,我在当前activity里面写如下代码:@Overridepublic void setRequestedOrie原创 2017-07-11 16:52:57 · 422 阅读 · 0 评论 -
android 音量获取和设置总结
1、获取音量值: AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);其中AudioManag原创 2017-11-08 17:22:43 · 18769 阅读 · 0 评论 -
Fresco加载gif实现圆角(无动画)
/** * 将gif处理成圆形 * * @param imageView * @param url * @param reqWidth * @param reqHeight */ public static void displayRoundImageSupportGif(final ImageView imageVie原创 2017-11-06 15:31:05 · 1645 阅读 · 0 评论 -
解决Could not get resource 'https://dl.google.com
好久不写博客了,还是写一下吧,做个记录,也能帮助别人。自认为自己已经算是老鸟了,在使用Android Studio build的时候也总会遇到奇怪的问题,例如今天mac电脑在gradle build时遇到了这个问题:问题描述:Could not resolve all dependencies for configuration ':main:skeletonDebug...原创 2019-08-19 15:33:11 · 20465 阅读 · 1 评论 -
机型适配遇到的奇葩
在网上搜索机型适配往往会搜索出一大堆什么布局适配,而我今天说的是,在工作中遇到的奇葩问题,以及解决办法。做安卓开发,真是心累,系统API不是都可以用的项目中需要使用系统的Camera和MediaRecorder录像,Android5.0之前使用Camera,之后使用Camera2。遇到了几个问题:1、三星SM-G9200使用Camera2录像生产的视频文件有问题,播放视频文件时,前原创 2017-01-09 17:05:55 · 613 阅读 · 0 评论 -
关于View在后台的getVisibility的坑
今天遇到了一个坑,直播间界面,用户清屏后,所有的View都不显示,恢复清屏后,所有的View都恢复显示。为了判断此时是清屏还是非清屏状态,直接随便判断一个View的显示状态:public boolean isVisibility(){ return textView.getVisibility() == View.VISIBLE;}奇怪的事情发生了,虽然所有的View都显原创 2016-12-20 16:53:10 · 5971 阅读 · 0 评论 -
activity被回收,fragment恢复处理
例如activity放在后台一段时间,当activity被回收之后,再重新进入activity的时候,会重新调用onCreate(),并且savedInstanceState不再是null,因此可以判断出是否被回收。onCreate中不要重复创建fragment,通过tag去获得fagment即可 @Override protected void onCreate(Bundle sa原创 2016-02-01 11:31:47 · 12972 阅读 · 3 评论 -
Android如何录制视频过程中切换保存路径?【已解决】
有一个需求,在录像过程中,满1分钟后,保存为另一个文件,而且要求不许丢秒。这个问题看似简单,是现实来好难,难点是切换保存路径。我做了一些尝试:1、使用Anroid自带的MediaRecorder,录制过程中不允许调用setOutputFile切换路径。2、MediaRecorder录制过程中瞬间stop、setOutputFile、start,可是中间丢了1.5秒原创 2016-03-24 13:25:04 · 2557 阅读 · 1 评论 -
【未解决】Camera录像过程中,应用前后台切换如何保持和SurfaceView不断开?
有一个需求,就是在一个长时间的录像过程中,按下Home键回到后台,这时候SurfaceView竟然销毁了,也就是说只要Activity进入不可见的状态,SurfaceView都会销毁,而此时相机仍然在录像,不受影响,当用户切换应用到前台的时候,Camera无法和新创建的SurfaceView继续连接,必须关闭Camera,重新绑定SurfaceView,然后startPreview才可以。原创 2016-03-30 15:00:22 · 4620 阅读 · 5 评论 -
使用ffmpeg录像,同时进行语音识别
使用javacv中的FrameRecorder进行录像,录像的时候,调用record方法写帧数据和音频数据,这时候我们有一个需求,录像的同时,要把声音实时拿过来进行语音识别。问题1:语音识别用的是讯飞的SDK,要求声音采样率8k或16k。而设置FrameRecorder.setSampleRate(8000)后,再FrameRecorder.start()会报错,报错如下:avcodec_enco原创 2016-03-31 18:47:40 · 2714 阅读 · 0 评论 -
Camera使用setPreviewCallbackWithBuffer优化内存
在直接设置mCamera.setPreviewCallback(this)方法后,启动预览,每产生一帧都会回调public void onPreviewFrame(byte[] data, Camera camera) 方法,看下面log:04-01 17:17:11.987 24768-24780/com.netease.carrecorder D/Camera-JNI: Allocatin原创 2016-04-01 17:40:14 · 8967 阅读 · 1 评论 -
关闭MediaRecorder录制状态改变时的声音
开始录制和停止录制的时候会发出“嘀”声音,在google里找了一会,找到了解决办法:原文:http://stackoverflow.com/questions/14369445/need-to-shut-off-the-sound-mediarecorder-plays-when-the-state-changes代码如下:AudioManager audioManager = (AudioMan原创 2016-03-24 12:32:54 · 6089 阅读 · 11 评论 -
Android Activity and Low Memory
Android trivia of the day! Activity A starts Activity B, but there's not enough memory to start Activity B. What do you think will happen?A) Activity B crashes with java.lang.OutOfMemoryEr转载 2016-10-09 10:44:52 · 1355 阅读 · 0 评论 -
DatePicker TimePicker 需要注意的地方
1、产品要求不允许查看并选择以前的时间。2、在Android5.0系统里,TimePicker的setOnTimeChangedListener不回调。原创 2016-10-21 16:48:41 · 570 阅读 · 0 评论 -
Android Studio 里面的引用第三方库总结,以及compile、provided使用
Android Studio引用第三方库很方便,只需要一句代码就可以搞定,几种引用第三方库的方式,总结一下:方式:1:它就会自动把这个包下载下来,并且引用它。节省git空间,而且修改版本也很方便。compile 'com.android.support:support-v4:23.3.0'方式2:引用libs下所有jar包compile fileTree(dir:原创 2016-10-25 11:04:18 · 30563 阅读 · 6 评论 -
使用SurfaceView实现飘赞动画
最近做直播项目,需要实现点赞动画,一提起动画就想到了使用View的属性动画,后来想了一下,那么多用户点赞,会导致屏幕上出现很多View,开销太大,一定会很卡,所以看主流主播软件用什么方案解决的。于是反编译了映客apk,大概看了一下,它的点赞只用了一个SurfaceView,每个心都是实时画到画布上去的,这样效率确实很高,再多的心也不怕了。思路有了,但是自己从头到尾写毕竟麻烦,后来上网查原创 2016-10-12 13:19:13 · 6163 阅读 · 8 评论 -
Android 横竖屏切换总结
有些应用需要支持横竖屏切换,例如播放器、直播间。切换横竖屏2种方式:1、通过点击按钮进行横竖屏切换setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //切换到横屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTR原创 2016-11-10 14:14:53 · 2604 阅读 · 0 评论 -
RelativeLayout的layout_marginBottom属性失效问题
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/tex原创 2016-10-25 14:28:14 · 13304 阅读 · 2 评论 -
Android Studio 导入eclipse带NDK的项目,使用Android.mk文件
我有一个eclipse项目,很久以前做的,现在需要导入到Android Studio里面,因为这个项目用到了JNI,所以不是直接转换那么简单。第一步:打开Android Studio,导入eclipse项目,它会自动帮你转换成格式。第二部:在gradle里面配置一下,目的为了指明mk文件以及输出so路径。在buildType里面写如下代码:sourceSet原创 2016-11-11 16:30:19 · 2660 阅读 · 1 评论 -
学习安卓相关的网站
里面有很多优秀文章http://gold.xitu.io/welcome/android这个总结的还不错https://github.com/GeniusVJR/LearningNotes原创 2016-11-13 11:24:45 · 283 阅读 · 0 评论 -
Android6.0权限适配之WRITE_EXTERNAL_STORAGE(SD卡写入)
转载自UncleChen's Blog,作者:UncleChen本文链接地址:Android6.0权限适配之WRITE_EXTERNAL_STORAGE(SD卡写入)前一篇博客中介绍了Android6.0运行时权限简介,最近遇到这么一个情况,就是一个App以前都是在SD卡根目录直接新建了一个XXX/image/目录,来保存图片缓存的,但是如果适配到Android6.0,我们就需要弹转载 2016-11-15 13:34:43 · 2905 阅读 · 0 评论 -
android 图标和图片位置,drawable or mipmap?
drawable-/Directories for drawable resources, other than launcher icons, designed for various densities.大概意思是,除了应用图标意外,其他的图片都要放在drawable文件夹下layout/Directory for files that define your ap原创 2016-02-01 14:46:13 · 2803 阅读 · 0 评论