![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android知识
迷路国王
丰富有趣
展开
-
Android代码混淆配置:ProGuard
混淆转载 2022-08-15 13:56:40 · 1152 阅读 · 0 评论 -
Android开发 retrofit 正常使用
retrofit原创 2022-08-08 11:39:00 · 406 阅读 · 0 评论 -
Android跳转系统电话页面
手机号原创 2022-07-27 14:32:19 · 843 阅读 · 0 评论 -
Kotlin 和java 版本编写 json数据
Kotlin原创 2022-07-14 10:20:30 · 530 阅读 · 0 评论 -
Retrofit 涉及的设计模式
retrofit原创 2022-06-05 16:24:28 · 743 阅读 · 0 评论 -
Retrofit 源码解析简洁篇
retrofit 源码解析简洁篇原创 2022-06-04 09:56:29 · 258 阅读 · 0 评论 -
Android 键盘工具类
键盘原创 2022-06-03 15:26:28 · 275 阅读 · 0 评论 -
Editext 手机号3-4-4格式
3-4-4原创 2022-06-03 15:20:34 · 154 阅读 · 0 评论 -
Android 播放音效工具类
音效工具类原创 2022-06-03 15:18:03 · 475 阅读 · 0 评论 -
Android 仿照微信查看大图
查看大图原创 2022-06-03 09:41:48 · 821 阅读 · 0 评论 -
Android跳转修改系统权限
修改系统权限原创 2022-06-03 08:58:31 · 381 阅读 · 0 评论 -
Android 创建APP退出到后台 显示通知栏
ForegroundPushManager.ktobject ForegroundPushManager { val notificationId = 200 //显示通知 fun showNotification(context: Context){ var notification = createForegroundNotification(context) NotificationManagerCompat.from(context).no原创 2022-03-08 16:08:39 · 2832 阅读 · 0 评论 -
Android实现横幅通知
代码如下: /** * 通知栏(兼容android 8.0以上) */ boolean isVibrate=true;//是否震动 //1.获取消息服务 NotificationManager manager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); //默认通道是default String channelId="default";原创 2021-09-14 15:37:06 · 2403 阅读 · 0 评论 -
Android 集成云信推送 (三)踩过的那些坑
<!--云信key--> <meta-data android:name="com.netease.nim.appKey" android:value="" /> <!-- 小米推送 --> <!-- 配置的service和receiver --> <meta-data android:name="com.xiaomi.push.原创 2021-07-20 15:48:08 · 1553 阅读 · 0 评论 -
Android 集成云信推送(二)设置是否允许接受推送通知
布局按钮代码设置:mMessageToggle.isChecked = NIMClient.getService(MixPushService::class.java).isEnablemMessageToggle.setOnClickListener { // false关闭通知栏消息提醒 true 开启通知栏消息提醒 val checked = NIMClient.getService(MixPushService::class.java)..原创 2021-07-20 15:24:04 · 381 阅读 · 0 评论 -
Android 集成云信推送 (一)通知栏跳转
第一步: 注册自定义推送消息处理NIMPushClient.registerMixPushMessageHandler(DemoMixPushMessageHandler())第二步public class DemoMixPushMessageHandler implements MixPushMessageHandler { @Override public boolean onNotificationClicked(Context context, Map<Stri原创 2021-07-20 15:15:14 · 678 阅读 · 0 评论 -
Android线程池原理详解
简介但凡有点开发经验的同学都知道,频繁的创建和销毁线程是会给系统带来比较大的性能开销的。所以线程池就营运而生了。那么使用线程池有什么好处呢?降低资源消耗可以重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。线程池的运行策略原理线程池所涉及到的接口和类并不是很多,其继承体系也相对简单。相关继原创 2021-04-08 19:08:47 · 779 阅读 · 0 评论 -
深入理解synchronized关键字
synchronized是如何实现同步的synchronized 是 Java 中的关键字,是利用锁的机制来实现同步的。而锁的机制是如何实现同步的呢?这主要是因为锁的以下两种特性:互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问。互斥性我们也往往称为操作的原子性。可见性:必须确保在锁被释放之前,对共享变量所做的修改,对于随后获得该锁的另一个线程是可见的(即在获得锁时应获得最新共享变量的值)原创 2021-04-08 18:26:51 · 66 阅读 · 0 评论 -
Kotlin协程大法
协程是什么首先,我们来回忆一下什么是进程和线程。什么是进程进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间。直白地讲,进程就是应用程序的启动实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。什么是线程线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。线程是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,因此比进程更加的轻量级。但是线程不能独立执行,必须依附在进程之上。有一句话总结的很好:对操作系统转载 2021-04-08 17:54:44 · 166 阅读 · 0 评论 -
安卓NDK增量更新集成步骤
为什么需要使用增量更新?增量更新主要通过新旧包生成差分包,客户端通过下载差分包就能与旧包合成新包。因为差分包一般比较小,所以能大大节省流量和加快下载速度。在Android中的主要使用场景是APK的升级、或者在线资源的升级等。安卓如何接入增量更新?增量更新主要通过开源库BsDiff,来实现拆分和合并的功能。首先需要下载BsDiff的源码。由于BsDiff依赖于Bzip2,所以需要把Bzip2的源码也下载下来。bsdiff网站:http://www.daemonology.net/bsdiff/下载原创 2021-04-08 17:20:38 · 200 阅读 · 0 评论 -
Handler postDelayed的实现原理
问题描述Handler.postDelayed()的原理是如何保证延时执行的?扩展:这样实现的好处是什么?题目分析猜测一下以我们对Handler的了解,内部使用了Looper对消息队列进行循环获取执行,所以我们估计postDelayed()是Handler内部搞了一个定时器,定时器到了delayed的时间就把消息加入到消息队列中,让looper在循环获取到该消息并执行。真的是这样吗?如果不是,为什么?我们来追溯一下源码消息是怎样入队的?首先调用的是sendMessageDelayed方法原创 2021-04-08 17:15:37 · 140 阅读 · 0 评论 -
Android进度条升级篇
先上效果图import android.animation.ValueAnimator;import android.content.Context;import android.content.res.Resources;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;impo原创 2021-02-19 18:21:52 · 389 阅读 · 0 评论 -
Android原生 通过图片检测到人脸
Android 使用原生库实现人脸检测/** * 绘制脸部方框的view,实测发现返回的脸部数据中没有具体的眼睛,嘴巴等数据 */public class DrawFacesView extends View { private Matrix matrix; private Paint paint; private Camera.Face[] faces; private boolean isClear; public DrawFacesView(C原创 2021-02-19 15:43:36 · 957 阅读 · 0 评论 -
Android 九宫格裁剪框
先上效果图: sourceSets { main { res.srcDirs = ['src/main/res', 'src/main/res/raw'] assets.srcDirs = ['src/main/assets', 'src/main/assets/'] } } lintOptions { abortOnError false }ext { permissionsDispatcherVersion = '2.4.0原创 2021-02-19 15:22:57 · 406 阅读 · 0 评论 -
Android 不一样的圆角View
实现思路:就是使用相对布局实现实现代码:用布局套一下imageView 就OKpublic class RoundRelativeLayout extends RelativeLayout { private Path mPath; private Paint mPaint; private RectF mRectF; private float mRadius; private boolean isClipBackground; public Ro原创 2021-02-19 14:51:38 · 120 阅读 · 0 评论 -
Android 不一样的进度条
先上效果图import android.annotation.SuppressLint;import android.annotation.TargetApi;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.drawable.Drawable;import android.graphics.原创 2021-02-19 14:20:03 · 748 阅读 · 0 评论 -
Android 自定义view之阴影
效果如下话不多说,直接撸代码import android.content.Context;import android.content.res.TypedArray;import android.graphics.BlurMaskFilter;import android.graphics.Canvas;import android.graphics.LinearGradient;import android.graphics.Paint;import android.graphics.原创 2021-02-19 13:59:48 · 708 阅读 · 0 评论 -
Android 调节亮度类
Android 辅助功能类—调节亮度类public class BrightnessHelper { private ContentResolver resolver; private int maxBrightness = 255; public BrightnessHelper(Context context){ resolver = context.getContentResolver(); } /* * 调整亮度范围原创 2021-02-19 13:52:29 · 177 阅读 · 0 评论 -
Android通过uri 获取文件路径
话不多说,通过uri获取文件路径遇到了很多坑,但也最终解决了,直接上代码。import android.content.ContentResolver;import android.content.ContentUris;import android.content.Context;import android.database.Cursor;import android.net.Uri;import android.os.Build;import android.os.Environme原创 2021-02-19 13:50:46 · 8904 阅读 · 12 评论 -
Android studio设置忽略文件
Android项目提交代码时一般忽略的文件:1、.idea文件夹2、所有的build文件夹3、所有的.iml文件4、local.properties文件。方式一:版本3.6之前File >>> setting >>> version control >>> ignored file版本3.6之后:File ->setting->editor->File Types方式二:在项目的.idea/workspace.原创 2021-01-24 17:55:04 · 1111 阅读 · 0 评论 -
Android Retrofit+OkHttp 上传图片和文字
依赖//okhttp implementation 'com.squareup.okhttp3:okhttp:4.9.0' implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0' implementation 'io.reactivex.rxjava2:rxjava:2.1.12' implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' im原创 2021-01-06 14:42:08 · 1134 阅读 · 0 评论 -
Android实现将Drawable资源ID存储到手机内部里面
过程分为三步:1. 将资源ID转化为Drawable2. 将Drawable转化为Bitmap3. 将Bitmap存储到Sdcard上代码如下:Java版public class MainActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);原创 2021-01-06 11:05:21 · 890 阅读 · 0 评论 -
使用Glide重新加载图片时会闪烁,RecyclerView等控件
最近开发使用Glide加载图片到RecyclerView的item中的ImageView,发现重新刷新时每个ImageView都会闪烁一下在网上找了很多解决方案:1.更改RecyclerView中的 DefaultItemAnimator 类中的 animateChangeImpl() 方法,去掉透明度变化然后再将更改好的类设置给RecyclerView发现没什么用2.更改RecyclerView的动画时间为0首先说明上面两种方式都是更改RecyclerView的动画,这个动画是针对整个i转载 2020-12-23 16:55:24 · 2249 阅读 · 3 评论 -
Android自定义照相机 预览拍照 切换前后置摄像头
异常:java.lang.RuntimeException: setParameters failedAndroid调用camera错误setParameters failed深层解析真机测试报错ERROR/AndroidRuntime: java.lang.RuntimeException:setParameters failed解决办法Android关闭自定义相机拍照声音android 自定义相机Camera2自定义相机自动对焦处理Android提供了Camera来控制拍照,步骤如下:(转载 2020-12-22 16:26:23 · 1275 阅读 · 0 评论 -
Android推送之华为推送
一 前言集成原因,由于公司项目集成极光推送,Android 8+以上的手机,app 在未运行的情况下接收不到消息,而且现在SDK版本要更新到26,华为手机有影响。二 集成华为推送集成,浪费了我不少时间,主要还是文档有些乱。集成之后我把它分为三部分,一,配置集成环境;二,处理接收消息。三,点击通知栏,跳转到相应页面。配置集成环境AndroidStudo依赖(我这里只集成推送)compile 'com.huawei.android.hms:push:2.6.3.301'SDK获取 下载相.原创 2020-08-12 16:14:40 · 1851 阅读 · 2 评论 -
轻松搭建基于JetPack组件的MVVM框架
介绍辅助android开发者搭建基于JetPack组件构建MVVM框架的注解处理框架。通过注解自动生成ViewModel的Factory类、lazy方法等;支持在项目的任意位置注入ROOM的dao层接口与Retrofit库中的api接口。github特点android开发者可以将brick理解为一个轻量级的注入框架,使用非常简单,使用4-6个注解即可工作。brick主要在编译期工作, 不会在App运行时产生任何额外的性能消耗 ,并且只有1个注解库会打包到你的android工程中,不用担心体积增大的问原创 2020-08-12 09:41:29 · 856 阅读 · 0 评论 -
即时通讯音视频开发(十九):零基础,史上最通俗视频编码技术入门
1、引言如今我们所处的时代,是移动互联网时代,也可以说是视频时代。从快播到抖音,从“三生三世”到“延禧攻略”,我们的生活,被越来越多的视频元素所影响。而这一切,离不开视频拍摄技术的不断升级,还有视频制作产业的日益强大。此外,也离不开通信技术的飞速进步。试想一下,如果还是当年的56K Modem拨号,或者是2G手机,你还能享受到现在动辄1080P甚至4K的视频体验吗?除了视频拍摄工具和网络通信技术升级之外,我们能享受到视频带来的便利和乐趣,还有一个重要因素,就是视频编码技术的突飞猛进。视频编码技转载 2020-08-11 13:56:22 · 1250 阅读 · 0 评论 -
即时通讯音视频开发(十八):详解音频编解码的原理、演进和应用选型
1、引言大家好,我是刘华平,从毕业到现在我一直在从事音视频领域相关工作,也有一些自己的创业项目,曾为早期Google Android SDK多媒体架构的构建作出贡献。就音频而言,无论是算法多样性,Codec种类还是音频编解码复杂程度都远远比视频要高。视频的Codec目前还主要是以宏块为处理单元,预测加变换的混合编码框架,例如H.264和H.265都是在这一框架下。而音频则相当复杂,且不同的场景必须要选择不同的音频编解码器。以下就是本次为大家分享的主要内容,希望通过此次分享可以使大家对音频编解码有一个.转载 2020-08-11 13:04:31 · 1894 阅读 · 0 评论 -
即时通讯音视频开发(十七):视频编码H.264、VP8的前世今生
前言目前从开发者的角度来说,音视频编码选H.264还是VP8几乎没有悬念(个人认为这当然是H.264了)。本文重在为读者从技术角度讲解H.264和VP8的发展渊源以及现时所面临的问题,相信读完此文后,对于即时通讯(IM聊天应用)的实时音视频开发中视频编码的选择会有个直观的了解。实际上,实时音视频通讯 = 音视频处理 + 网络传输。包括采集、编码、网络传输、解码、播放等环节。音视频处理中最为关键的视频编解码是个头等重要的问题,对于开发者来说,以目前所能找到的技术资源以及应用的普及程度,因为背靠巨头,H.转载 2020-08-11 12:18:18 · 1151 阅读 · 0 评论 -
即时通讯音视频开发(十六):移动端实时音视频开发的几个建议
前言随着移动互联网的快速发展以及智能终端性能的逐步提高,智能终端间进行实时音视频通讯成为移动互联网发展的一个重要方向。实际上,实时音视频通讯 = 音视频处理 + 网络传输。包括采集、编码、网络传输、解码、播放等环节。这么多项并不简单的技术应用,如果把握不当,将会在在实际开发过程中遇到一个又一个的坑,本文将就几个典型问题给出简要的参考建议。有关实时音视频开发时的技术难题请参见《音视频云声网Agora:从demo到实用,中间还差1万个WebRTC》:http://www.52im.net/article.转载 2020-08-11 11:30:32 · 532 阅读 · 0 评论