- 博客(50)
- 资源 (7)
- 收藏
- 关注
原创 android textview.SettextSize不起作用的解决方法
android texview在代码中动态的设置textSize不起作用,而settextcolor却有效,调用刷新也不起效,这个时候可以用 SpannableString lightSp = new SpannableString(getString(R.string.light_device)); lightSp.setSpan(new AbsoluteSizeSpan(textSmallSize, false), 0, lightDeviceTxt.
2020-11-30 14:26:17
2255
原创 android 指纹锁工具类
android sdk版本超过23以上就可以支持添加指纹识别功能,因此可以为自己的应用添加指纹锁这个概念的启动限制。高于23,少于28版本的,调用方法后如果屏幕前盖有指纹工具的话会显示指纹锁出来,高于28版本会出来指纹锁识别对话框,由系统本身提供,有回调函数支持各种事件,记录下具体的识别工具类。import android.app.Activity;import android.app.KeyguardManager;import android.content.Context;import a
2020-11-27 11:57:15
439
原创 android opencv单机版人脸识别+比对
原理: 通过android 系统自带的谷歌人脸识别获取响应的图片,保存在本地,然后跟先前的照片作比较,相似度大于0.8可以算为同一个人java 部分代码:package com.example.faceapp;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import androidx.core.app.ActivityCompat;import androidx.co
2020-11-20 18:19:41
1857
原创 android 蓝牙开发总结
,Android 蓝牙开发主要分为传统蓝牙/ble开发,前者通过建立rf通道后进行输入输出流的信息交互,后者是通过修改特征值和监听特征值来实现智能硬件和手机设备的交互。所以开发前就要确定到底要使用哪种,因为存在着各自的优缺点。传统蓝牙的优点:没有限制信息的长度,能根据自我定义的byte长度进行输入,只要加上自家定义好的协议就能区分有没有错误数据,且不用担心频繁操作或者操作缺失而导致的搜索不到问题。缺点:搜索时间略长,与ble差距极大,调用startDiscovery后是根据接收.
2020-07-22 22:58:40
1380
1
原创 android openGl连续录制多个视频
继上篇文章的代码,在原来基础之上添加时间判断,到时间则切换至下一个录制器。在java层我想到的逻辑就是用不同的MediaMuxer来实现,当然你也可以选择将一个视频切割为多个视频来间接实现。下面只是粗略写下,没有根据时间戳来命名文件名,10秒到了后将视频丢到next.mp4录制。需要注意的是,如果将muxer放置主线程中释放资源,则大约耗时800ms,不同机型不同配置可能耗时更长,所有要将其放置子线程释放。主要代码:package com.my.video.utilimport a
2020-07-06 11:01:23
660
原创 android openGL时间戳水印录制
Android录制视频带水印有在openGl中绘画再通过mediaCodec+EGLSurface读取出来,还有就是不渲染的情况下将camera的byte数组与时间戳生成的图片数组转为二进制数据混合一起,又或者录制完之后用ffmpeg后期补充水印。此文主要讲第一个,代码下载:https://download.csdn.net/download/gan303/12509216主要代码:package com.my.video.surfaceimport android.graphics.Su
2020-06-10 09:52:36
1772
原创 android openGl录制音视频
步骤->将camera预览至GlSurfaceView上,然后通过EGLSurface+MediaCodec+AudioRecord+MediaMuxer后台录制成Mp4主要代码:package com.my.videoimport android.graphics.SurfaceTextureimport android.opengl.GLES20import android.opengl.GLSurfaceViewimport javax.microedition.khrono
2020-06-08 15:47:36
1241
原创 Android OpenGl展示视频内容
Android中OpenGL展示视频内容和预览摄像头数据用的纹理ID都是GLES11Ext.GL_TEXTURE_EXTERNAL_OES,所以可以直接按照上一篇的预览Camera基础之上,继承OesFilter,共用同一个GlSurfaceView,根据新生成的纹理ID创建SurfaceTexture绘画即可。class CodecRender(val surface: CodecSurface) : GLSurfaceView.Renderer { private val TAG: Str
2020-05-20 09:32:17
352
原创 android openGL 预览camera/camear2
//权限请求和切换摄像头class CameraActivity : Activity() { private var surface: CodecSurface? = null private var btn: Button? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) window.addFlags(.
2020-05-19 15:40:45
942
原创 Android mediaCodec+audioTrack+mediaExtractor播放aac
class PlayAAC : Activity() { val TAG: String = "PlayAAC" val aacPath: String = "/sdcard/test/test.aac" val streamType: Int = AudioManager.STREAM_MUSIC val streamRate: Int = 22050 val channelConfig: Int = AudioFormat.CHANNEL_CONFIGURAT..
2020-05-12 17:33:09
357
原创 android MediaExtractor分离并播放pcm
//activity 1class Video2PcmActivity : Activity() { val TAG: String = "Video2PcmActivity" val filePath: String = "/sdcard/test/test.mp4" val pcmPath: String = "/sdcard/test/test.pcm" override fun onCreate(savedInstanceState: Bundle?) { .
2020-05-11 16:09:30
537
原创 android 录制视频技术记录
Android 录制视频可以大致分为: 直接录屏,带滤镜的录屏前者就是直接根据camera的onpreviewcallback返回的byte数组,然后传输,又或者根据camera2的ImageReader来获取预览数据,这就需要根据自己的版本设定来选择了,又或者根据设备的版本来做出兼容,当然方案2更为合适,至于音频方面就简单得多,都是通过AndroidRecord来read当前的音频数据,然后...
2020-04-28 10:45:30
565
原创 (算法题)给定一个字符串,求第一个不重复的字符
public static void main(String[] args) { String str = "abbaddxyyu"; char result = 0; char tempChar = 0; char[] testData = str.toCharArray(); StringBuffer s...
2019-10-23 18:03:11
639
原创 (算法题)标号1-n的n个人首尾相接,1到3报数,报到3的退出,求最后一个人的标号
public static int getLastPeopleNum(ArrayList<Bean> tempList, int mode) { if (tempList != null) { ArrayList<Bean> list = (ArrayList<Bean>) tempList.clone();...
2019-10-23 17:14:44
594
原创 android Parcelable encountered IOException writing serializable object解决方法
这个错误具体没有指向我们能编辑的代码某一行,所以只能从序列化方面开始着手。而网上的解决方法大多指向了我们序列化传输实体类中的某一项并没有实体类,这里说下另外一种情况。那便是Fragment中传输序列化对象后,启动新的activity报此类错误的情况。由于我们新的Activity并不需要这个序列化对象,所以着手点并不在于序列化对象本身,而是在于生命周期内@Overrideprot...
2019-08-27 16:19:30
1882
原创 android TextView自适应间距
android中原生的TextView会因为各种英文字符或者特别符号、颜文字等,判定没有足够空间时会自动换行,因为需要自己重写并适配好这样的问题,下面分享下这样的控件代码public class JustifyTextView extends TextView { private int mLineY; private int mViewWidth; public...
2019-03-12 16:36:48
1006
原创 android 人脸区分简要
最近一直在看openCv,用处很多。比方说人脸识别,图片处理等,当然最主要的还是用来做人脸识别。那么,怎么人脸识别法呢? 主要是用到了直方图匹配。什么意思呢,可以参考下支付宝等手机里面那个人脸识别内容框,其实里面已经固定好了一个大小。然后跟第一次注册时的实名人脸做对比。里面的技术内容很多,最初有图片的截取,保存、上传。其次有实时的人脸图片匹配,里面包括了转化灰度图,计算直方图,...
2018-10-10 16:45:51
226
原创 android ubuntu编译ffmpeg
1.下载ffmpeg的源代码2.新建脚本编译文件build_android.sh,如果要编译其他cpu格式,修改cpu处的赋值即可#!/bin/bashmake clean# NDK的路径,根据自己的安装位置进行设置export NDK=/home/gjh/android-ndk-r10eSYSROOT=$NDK/platforms/android-19/arch-arm/TO...
2018-08-25 11:09:13
731
原创 android cannot call this method while recyclerview is computing a layout
报错的原因出自源代码的异常抛出,解决办法既不是放在主线程也不是判断滚动标识位再刷新,加个延迟刷新即可。应用场景可在Focus事件中取消上一次的刷新并开启加500毫秒的延迟任务即可。这时实际上已经滚动结束了。...
2018-08-17 16:41:10
962
原创 android DLNA投屏
android投屏技术的基本原理就是根据DLNA以及UPNP来实现,另外还有些黑科技技术便是根据端口号或者通过广播来用adb下载本身相关的apk来间接实现投屏,当然此处不提及黑科技。原理什么的百度一堆。这里主要讲实现方式和具体实现的代码。那么,开始开发这玩意的时候肯定要先看看有没有现成的轮子,git上是有轮子的,链接如下:https://github.com/4thline/cling 最...
2018-05-04 17:44:38
21395
4
原创 android studio编写jni代码自动补全
android studio中编写Jni的时候非常不方便,没有代码不全,有些是因为环境没配好,有些是配置没写全。插件下载的话不必多说,都是在setting里面下载好即可,下面说下如何让jni中的cpp或者c文件代码可以自动补全。我们需要在工程中的Build文件上配置上下面这句话即可:sourceSets.main { jni.srcDirs = ['src/main/jni'] j...
2018-02-25 10:25:21
4709
原创 openGl oom的解决方法
android需要用到openGL的时候基本都会使用到硬件加速,而一旦超出机器的承受范围,轻则卡顿,重则直接报openGl out of memory。那么,怎么解决呢?1.最不靠谱的就是去掉硬件加速,使用软件加速或者不用加速,那么就会变得卡顿起来2.减少重绘主要是减少布局的层次,尽量一个frameLayout解决层次关系3.减少图片的内存使用可以看下自己用的图片本身的
2017-12-07 17:30:26
860
原创 android setVisibility(GONE)不及时刷新的问题
android中需要根据接口返回或者获取完用户登录信息后进行数据刷新的地方很多,基本都会用到view.setVisibility(View,VISIBLE)或者VIEW.GONE来实现界面上的刷新。然而有些时候或者有些设备上,调用这些方法会有显示异常的问题,具体表现为调用无效或者调用有效,但是控件本身消失但仍占据控件。之所以有这种情况的原因大致上有两种:1.控件本身正在执行动画
2017-07-26 10:55:14
11199
4
原创 android 从imageloader中取出缓存中的图片
android项目中有时需要从缓存中获取出已经加载好的图片,以免进行二次加载浪费流量和时间,因此,需要从imageloader本身缓存中获取出已经加载好的图片做法如下:Bitmap bitmap = ImageLoader.getInstance().getMemoryCache().get(bean.pic);if (bitmap == null) { String pat
2017-06-15 10:52:15
1059
原创 java 获取两颜色值的中间值
有时候做项目的时候,需要动态的计算两颜色值之间的中间值,然后做出一定的效果,那么该怎么求呢? 下面说说做法:简单而言,就是需要对两颜色之间的求和再取平均值,但是直接使用color.parseInt再求和除2是不对的,因为直接求和会导致颜色不对,具体原因出自相加求和颜色退位。那么,该如何算呢,贴下代码:public static String getMiddleColor(Str
2017-06-13 19:39:58
2269
1
原创 android ContentProvider读取其他应用数据库
android中,保存和读取数据数据的方式很多种,大致上有网络保存,内存记忆,文件保存和数据库保存。而应用之间的数据库数据分享,读写,主要用到的便是ContentProvider.为什么这么说呢? 如果能直接读取数据库文件的话会快很多,然而我们并没有直接读写数据库文件即****.db的权限,即便实在cmd命令下ls目录,也会直接提示permission denied.因为我
2016-10-24 14:36:33
5089
原创 android 识别U盘以及读写文件
android中读写文件的需求地方很多,其中就包括了识别U盘,弹出U盘,读写U盘的文件等。那么,如何实现这些需求呢?笔者简单的说下:1.识别U盘:识别U盘的方法只要是用到了2个android官方类。它们分别为:ContentResolver和AsyncQueryHandler。表现为前者提供内容给后者读取。作法如下:1)获取状态并遍历contentO
2016-08-29 10:29:05
18557
23
原创 android 细数断点续传的坑
android项目中,不可避免会下载一些第三方应用,或者自身更新的包,或者下载视频文件,那么都会考虑用到断线续传的方式。那么,断电续传的方式大概有3种:1.比如下载视频的时候,调用js的方法,把文件下载下来,然后用randomAccessFile合并成一个文件。2.如xUtils的断点续传代码,具体自己看。3.利用sqlite,配合上randomAccessFile
2016-05-08 11:13:22
4710
原创 android popwindow和dialog的取舍
android之中,对话窗口使用率极高,表现在提示用户或者是弹出操作栏之上。那么,他们之前的取舍应该在哪呢?首先对比一下他们之间的共同之处1.都可以根据setContentView来设置窗体的自定义内容2.都可以根据setCanceledOnTouchOutside来搞定点击外部取消对话框3.基本上都可以出现在大部分位置,只要表现在popwindow是通过动画,
2016-02-27 13:20:24
4179
原创 android sqlite更新版本并记录旧数据
android开发中,不时会用到数据库,而android机子中本身就自带了sqlite这个小型数据库,因此我们可以直接运用它。而版本迭代时,数据库表中的字段会不时增加或者减少,或者是增加几个表,除了我们在SQLiteOpenHelper中进行代码更新修改外,还需要在添加回先前数据库中的数据。直接看看主要的代码:public class DatabaseHelper ex
2016-02-17 17:35:29
535
原创 android 仿QQ音乐歌单效果
最新的项目里面,有一个需求比较好玩,就是要仿造下QQ音乐里面的歌单上下切换效果,如下先做一个类似的效果,测试效果如下:
2016-02-17 09:53:53
6125
1
原创 android 截屏内容的获取
有些app的开发需求中或许会包含 得到截屏的图片 截屏的通知等情况。那么来讲一下如何获取。当然截屏的快捷键自己网络查询。主要用到的类为ContentObserver,下面来看看详细的代码: private static final String EXTERNAL_CONTENT_URI_MATCHER = MediaStore.Images.Media
2016-02-16 16:23:37
986
原创 android view简单水平垂直移动的api运用
在实际的开发之中,很多时候需要根据手势或者按钮的点击来修改某些空间的位置,一般常见的做法为1.根据手势所获得的x,y坐标,重新调用view.layout方法,随之把参数都设置进去。2.使用属性动画,也就是object.animation的方法,设置透明或者x,y方向上的改变,当然做这个要考虑低版本的处理,需要导入nineOldandroid包来兼容。3.使用补间动画,也就是Alpha、
2016-01-29 17:11:35
1697
原创 android eclipse代码混淆
android 代码是开源的,这个大家都知道,不加密或者不混淆的话别人很容易通过反编译的工具查看我们的代码甚至是通过逆向工程什么的直接篡改我们的app,加个广告就当自己的应用上传上去。因此,混淆是必要的。网上有很多第三方加固,如百度加固,360加固等,但是这些加固会存在一些问题,比如在一些机型上跑不起来或者开启时卡顿的时间长。因此,这篇简单的说下如何混淆。具体的
2015-12-29 11:47:05
2397
原创 android fragment报Fragment already active
android fragment的用处非常大,常用于同一界面下点击下方或者左/右侧菜单栏切换不同的内容。普通操作下并没有问题,但是在专业人员的测试下就有问题了,如Fragment already active,或者no host。这2个问题主要的原因有如下2点。第一点:每一次切换并没有写FragmentTransaction fragmentTransaction =
2015-12-28 14:12:35
2780
原创 android imageloader加密解密图片
android 项目中开发为了节省周期又或者不重复造轮子都会选择一些开源框架来设计我们的app,而imageloader是加载网络本地图片的一大利器,但是其本身并未提供加密和解密的方法,需要我们从源码中自己改写。首先简略的说下imageloader的工作原理,在displayImage方法中我们可以看到:Bitmap bmp = configuration.memoryCa
2015-12-11 17:36:27
2955
原创 android imageview倒影
在很多的手机和电视应用中,好看的效果都离不开倒影。而目前大部分的都是在同一个imageview中做倒影,也就是原图和倒影图一起,重新组合成一个图片并绘画上去。但是对于一些可以选中,但是倒影不需要放大和变化的应用来说,并不符合实际的开发需求。因此,对于这样的需求,可以考虑2个imagview来实现,上下来叠加,一个可以focused,另外一个只作为获取前一
2015-11-13 15:09:53
1680
原创 android更新app未读消息数目在app图标的办法
很多时候,自己写的app会推送或者提示用户有新的内容或者消息时,为了让用户注意,一般都会在app图标处或app内容中的消息界面中有数目提示,但是一般都是前者的用户体验效果更佳。因此,对于这类的写法,谷歌提供了下面的写法: Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE")
2015-09-21 16:17:30
5586
3
原创 android仿音乐引用锁屏切换音乐歌曲壁纸
在许多音乐应用中,一般都会附带有锁屏时切换壁纸,解屏时还原的功能以及有开屏时的状态通知栏有歌曲的提示和播放进度等。现在来说说怎么简单的就实现锁屏切换壁纸的功能。首先,要先写好广播,用于监听锁屏和开屏等系统广播,如下: BroadcastReceiver mybroadcast = new BroadcastReceiver() { private String acti
2015-09-21 13:07:00
2668
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人