andriod
ange_li
一个android app 开发工程师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ubuntu 上编译android版本ffmpeg的库
一条命令编译启用lame 和 x264的ffmepg android 库,arm64-v8a,armeabi-v7a原创 2021-11-14 18:42:58 · 217 阅读 · 0 评论 -
rxjava 错误重试例子
当observable 需要失败重试时可以使用retryWhen,如网络请求失败重试原创 2023-01-15 10:00:58 · 518 阅读 · 0 评论 -
rxjava 任务在activity 和fragment destroy时自动解除
rxjava 任务在activity 和fragment destroy时自动解除,防止内存泄漏原创 2022-11-07 15:37:07 · 797 阅读 · 0 评论 -
apk如何使用腾讯加固
apk如何使用腾讯加固原创 2022-10-14 15:23:23 · 1677 阅读 · 0 评论 -
Android 原生 CalendarView 修改样式
Android 原生 CalendarView 修改样式原创 2022-08-30 20:45:04 · 2000 阅读 · 1 评论 -
WorkManager 简单使用
1.在AndroidManifest.xml 添加<provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" android:directBootAware="false" android:exported="false"原创 2021-12-23 14:34:03 · 1972 阅读 · 0 评论 -
在GSYVideoPlayer中实现VLC 内核
GSYVideoPlayer 是一个比较火的开源框架。其支持Android 系统中的MediaPlayer内核,ExoPlayer 内核, ijkPlayer 内核。 在我使用的过程中发现不支持h265格式的avi 文件播放,所以我实现了一个VLC内核。import android.content.Context;import android.net.Uri;import android.os.Handler;import android.view.Surface;import android原创 2021-12-17 18:19:37 · 2877 阅读 · 0 评论 -
ubuntu编译ijkplayer-android
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).export PKG_CONFIG=/usr/bin/pkg-configexport PKG_CONFIG_PATH=/usr/local/lib/pkgconfigexport PATH=/usr/local/ffmpeg/.原创 2021-11-13 15:21:18 · 2352 阅读 · 0 评论 -
androidstudio 下载并配置缓存路径
这个我用过比较好的android开发工具下载网站,支持下载android stduio ,ndk ,sdk。修改文件android-studio\bin\idea.properties。修改缓存路径,默认是在c盘,原创 2021-10-19 14:32:20 · 7108 阅读 · 0 评论 -
android监听键盘弹出
public class GlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener { private final Rect mVisibleViewArea; private final int mMinKeyboardHeightDetected; private int mKeyboardHeight = 0; /** * Activity的根布局(Activity#s.原创 2021-07-14 18:25:41 · 173 阅读 · 1 评论 -
android使用theme修改状z态栏文字颜色(黑白切换)
<style name="editTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/white</item> <item name="colorPrimaryDark">@color/white</item> <item name="colorAccent">@col...原创 2021-05-19 17:26:07 · 612 阅读 · 0 评论 -
密码中至少包含一个特殊字符,数字,字母,的8-16位密码的正则表达式
private boolean isAvailablePassword(String password) { return password.matches( "^(?=.*[A-Za-z])(?=.*[0-9])(?=.*[~!@#$%^&*()_+|<>,.?/\\\\:;'\\[\\]{}\"]).{8,16}$"); }原创 2021-05-08 16:37:48 · 2437 阅读 · 0 评论 -
Rxjava简单原理说明
Rxjava 本质上是 观察者模式框架。被观察者(Observable)->传递数据-> 观察者(observer)在调用subscribe ()方法进行订阅时,会把observer 层层往上构造出新的observer。例如:Observable.create().map().subscribe(observer) ,observer会先被new MapObserver(observer),用MapObserver接收事件源,再传递到原始的observer。...原创 2021-03-09 00:06:05 · 462 阅读 · 0 评论 -
Android 知识点总结
Android 知识点概要原创 2021-03-06 00:29:18 · 197 阅读 · 0 评论 -
Android activity 的taskAffinity属性
1.默认情况下一个activity的taskAffinity的值为app包名2.在app中设置一个activity 的taskAffinity为非包名+launchMode为singleTask 或者 singleInstance,可以使activity在新的task启动。3.在app中设置一个activity 的taskAffinity为非包名+launchMode为standard,不可以使activity在新的task启动。单纯使用 taskAffinity 不能导致 Activity 被原创 2020-10-22 23:45:05 · 516 阅读 · 0 评论 -
android cmake方式引入camera2ndk报错: NOTFOUND
我是这样引入的:find_library(camera2ndk-lib camera2ndk)target_link_libraries(native-lib ${log-lib} ${android-lib} ${camera2ndk-lib} avutil swresample avcodec avdevice avfilter avformat swscale)然后编译时出现:D:\github\FFmpeg\ffmpeg\CMakeLists.txt : C/C++ debug|原创 2020-09-19 18:09:06 · 989 阅读 · 0 评论 -
ffmpeg 代码实现从视频中1秒截一张图
背景:我这个代码是在我的Android demo 里截取出来的,项目里是实现了从相册里选择一个视频,然后每秒生成一张截图;当然这个代码在非android 项目也是可以使用的。头文件:decode_video_to_img.h#ifndef DEMO_DECODE_VIDEO_TO_IMG_H#define DEMO_DECODE_VIDEO_TO_IMG_Hint createImg(char* inputFileName, char * outputFileName);#endif /原创 2020-06-16 20:52:55 · 2214 阅读 · 2 评论 -
不使用retrofit 情况下用Kotlin 的deferred 封装请求框架?
前言:旧项目没有使用retrofit,但是我又想让自己封装的请求框架支持Kotlin 的deferred ,于是参考了com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory,写出了以下的代码,自测可以使用。override fun <T> excuteOnDef...原创 2020-02-10 12:58:50 · 1960 阅读 · 2 评论 -
Kotlin 类委托(by) 解构HttpUtil
在android 开发中,我们都会用到Http请求框架有很多,偶尔会更新框架,如从volley替换成okhttp,如果没有做好封装,替换的时候需要修改很多地方。下面提供一个封装的思路,做一个httpUtil,当需要替换请求框架,我们只需要重写RequestImpl,而不需要修改很多地方。1.准备一个接口类public interface IRequest { <T>...原创 2020-02-07 13:12:38 · 2510 阅读 · 1 评论 -
android 动画为什么可以在超出view 的范围显示?
前言:我有个同事问我为什么view 执行补间动画时可以超出自身范围绘制,如scaleAniamtion 放大整个view,但实际上view 的width,height都没有发生改变,为什么可以超出自身范围绘制呢? 最后我研究了一下,得出这张图,有说得不对的地方请指正:补间动画图解...原创 2020-01-12 11:09:45 · 1125 阅读 · 0 评论 -
如何使用dagger2搭建简单清晰的android框架
第一步:导入dagger2 所需的包($DAGGER_VERSION是dagger2的版本)第二步:编写Module 对象进行构建(一般android项目都会有网络请求、数据库、shareprefence、等常用的类,构建相对比较复杂,dagger2就可以很好的对这些对象进行构建)第三步:编写component接口类来把module组合起来第四步:rebui原创 2017-04-04 22:27:21 · 357 阅读 · 0 评论 -
android 配合scrollview 解决键盘遮挡EditText的问题
1.BaseActivity.javapackage com.ange.keyboardhidedemo;import android.app.Activity;import android.os.Bundle;import android.support.annotation.Nullable;import android.util.Log;import and...原创 2018-07-13 18:37:23 · 6809 阅读 · 0 评论 -
Android 设置统一风格的状态栏
由于android4.4后才能设置状态栏,而且在android5.0前,状态栏都会覆盖一层灰色半透明的视图去不掉所以为了统一状态栏的显示,判断在5.0后的手动给他加灰色半透明的view,跟qq的效果一样; private View statusBarview;//状态栏 //color 状态栏的颜色,这里是(#7F999999写在colors.xml里后引用) private ...原创 2018-07-14 09:32:33 · 857 阅读 · 0 评论 -
jnimerge 报错Required: PROJECT. Found: EXTERNAL_LIBRARIES, PROJECT, SUB_PROJECTS
把build文件删除。重新编译原创 2018-08-27 16:54:17 · 3007 阅读 · 2 评论 -
android 删除图片后通知系统图库删除图片
//删除文件后更新数据库 通知媒体库更新文件夹,!!!!!filepath(文件夹路径)要求尽量精确,以防删错 public static void updateFileFromDatabase(Context context,String filepath){ String where=MediaStore.Audio.Media.DATA+" like \""+fi...原创 2018-08-20 15:40:14 · 7080 阅读 · 4 评论 -
使用Rxbus通知Activity页面刷新,不立刻刷新,延迟到activity onResume 后才刷新
1.使用Rxbus通知Activity页面刷新,不立刻刷新,延迟到activity onResume 后才刷新RxBus.getDefault().toObservable(ReportUpdateEvent.class) .subscribeOn(Schedulers.io()) .observeOn(AndroidSched...原创 2018-09-06 14:40:06 · 1354 阅读 · 0 评论 -
gradle依赖子project的指定flavor
gradle依赖子project的指定flavorgradle 2.+gradle 3.+ 不需要指定configurationgradle 2.+##主模块dependencies {debugCompile(project(path: “:im”, configuration: “debug”))releaseCompile(project(path: “:im”, configur...原创 2018-12-26 10:58:14 · 3156 阅读 · 2 评论 -
activity window对象创建过程及其作用
activity里持有成员变量mWidow,在attach里初始化,并设置windowManageractivity的attach方法在ActivityThread 的performLaunchActivity方法里被调用activity被创建后,activity的attach方法被调用Window.java 里面有几个重要的成员变量,mAppTo...原创 2020-12-23 00:33:39 · 995 阅读 · 1 评论 -
使用NestedWebView 实现WebView 顶部加原生内容嵌套滑动
1.要实现这个WebView 顶部加原生内容嵌套滑动,想到嵌套滑动比较好的解决方案就是"NestedScrollingChild2"和"NestedScrollingParent2"2.我这里的方案是CoordinatorLayout+AppBarLayout+NestedWebView3.布局如下:activity_nest.xml<?xml version="1.0"...原创 2019-06-30 15:52:13 · 2717 阅读 · 2 评论 -
从asset复制数据库到data/data/databases
private File copyDB(){ AssetManager asset =getAssets(); InputStream inputStream=null; FileOutputStream outputStream=null; File file = new File("data/data/" + getPackageName() + "/datab原创 2016-01-13 16:43:54 · 554 阅读 · 0 评论
分享