
android
野猿新一
这个作者很懒,什么都没留下…
展开
-
Android InputFilter详解
项目中遇到一个需求,需要限制EditText只能输入到小数点后两位网上有两种方案,一种是使用TextWatcher,另一种就是使用InputFilter,感觉使用InputFilter的方式比较优雅,比如EditText android:inputType限制各种输入类型就是通过各种各种InputType来实现的。还有maxLength限制EditText输入长度也是通过InputFilter实现的。原创 2023-03-17 14:43:16 · 2916 阅读 · 1 评论 -
Android build.gradle buildConfigField 配置数组
我们可以在build.gradle中通过buildConfigField配置一些java的基本类型,比如Integer,boolean,还有String等,其实还可以配置数组配置buildConfigField可以在defaultConfig中配置,也可以在buildTypes中分别为不同的编译类型配置不同的值android { defaultConfig { buildConfigField "String[]", "YEYUAN_FAMILY",原创 2020-08-06 11:01:21 · 2082 阅读 · 0 评论 -
Android 获取开发版和发布版秘钥库keystore的SHA1/MD5/SHA256值
在使用一些第三方的SDK比如高德地图,创建项目的时候会要求输入包名和SHA1值,这个SHA1值是指我们的项目打包的时候用的keystore签名文件的SHA1值,有debug版和release版命令行格式keytool -list -v -keystore 秘钥库路径获取测试版SHA1值首先要先知道测试版keystore存放的位置,一般默认路径为C:\Users\用户名\.andr...原创 2020-01-15 16:34:51 · 1328 阅读 · 0 评论 -
Android JNI开发解决Error occurred while communicating with CMake server问题
我原来有个老的jni项目,用的cmake版本是3.6.4,后来又新建了一个新的jni项目,可能是由于Android Studio有更新过,新建的项目提示要下载升级cmake,然后就升级到3.10.2版本,结果新项目可以跑,老的项目却跑不起来了Error occurred while communicating with CMake server. Check log D:\ws\NdkTe...原创 2020-01-15 15:42:53 · 843 阅读 · 0 评论 -
Android JNI开发解决Could not get version from cmake.dir path问题
项目用到了JNI,在Android Studio上NDK开发用的是cmake,但是打开项目报了如下错误Could not get version from cmake.dir path 'D:\Android\Sdk\cmake\3.10.2.4988404'.- CMake '3.6.0' found in SDK did not match requested version '3.1...原创 2020-01-15 14:53:56 · 4596 阅读 · 0 评论 -
Android 动态权限申请框架easypermissions使用详解
前言Android M(6.0)开始,一些危险的权限需要动态申请,称为动态权限或运行时权限,比如摄像头的权限,存储读取权限等。easypermissions是一个为了简化运行权限申请过程的框架,封装了原生API的一些代码依赖注意AndroidX和使用support包引用的是不同的依赖dependencies { // For developers using Andr...原创 2020-01-05 16:41:49 · 9064 阅读 · 0 评论 -
Android Retrofit网络请求返回HTTP 405 Method Not Allowed
Method Not Allowed从字面意思可以知道是请求的方法设置错了,比如如下接口支持的方法是DELETE,若用POST请求就会报该错误,只需改成正确的请求方法即可解决问题。错误的请求@POST("/users/{id}")Observable<Object> deleteUser(@Path("id") String id);正确的请求@DELETE("/...原创 2020-01-05 12:53:58 · 2334 阅读 · 0 评论 -
Android Studio 右侧Gradle窗口内容为空显示nothing to show问题的解决方法
问题Android Studio右侧的Gradle窗口正常显示如下,我经常用里面的assemble来生成签名的正式apk文件,但是突然有一天要发布版本的时候却发现里面空空如也,只显示nothing to show。慌里慌张的,老板还催着我发布版本呢。解决方法1.打开项目根目录下的settings.gradle文件,注释掉里面的内容,比如include ':app',然后点击右上角的...原创 2019-12-27 16:26:59 · 7091 阅读 · 3 评论 -
android.os.TransactionTooLargeException: data parcel size 4195216 bytes问题原因与解决
从AActivity跳转BActivity通过intent.putExtra传递数据,结果报android.os.TransactionTooLargeException: data parcel size 4195216 bytes错误,意思就是传输的数据过大,4195216byte转换下大概为4Mb,确实有点大,因为是从本地文件读取的String内容,可能文件内容太大。源码遇到问题我们...原创 2019-12-27 16:01:45 · 3623 阅读 · 1 评论 -
Android EventBus Sticky Events粘性事件详解
简介普通事件:通过post()方法发出的普通事件,会被已经注册的订阅者接收到,若订阅者是在消息发送之后才注册,那么是不会接收到该事件的粘性事件:而粘性事件是可以被事件发出之后才注册的订阅者接收到,也可以在事件发出之后通过主动查询获取事件内容。粘性事件实现原理其实是把最近的事件缓存到内存中,之后注册的订阅者还可以查询出来比如在AActivity中发送一个粘性事件Event,然后打开BAc...原创 2019-12-27 14:07:34 · 5391 阅读 · 0 评论 -
Android 广播接收者BroadcastReceiver的两种注册方法
BroadcastReceiver示例我们先实现一个简单的BroadcastReceiverpublic class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (in...原创 2019-12-27 11:28:38 · 919 阅读 · 1 评论 -
Android AsyncTask使用说明
示例代码我们先运行下如下代码,看下打印的log,然后再做说明private void doTask() { new AsyncTask<String, Integer, Boolean>() { @Override protected void onPreExecute() { Log.d("MyAsyncT...原创 2019-12-27 10:09:52 · 237 阅读 · 0 评论 -
Android 四个步骤集成EventBus事件总线框架实现消息发送和接收
1.Gradle依赖implementation 'org.greenrobot:eventbus:3.1.1'2.定义消息类空消息public static class EmptyEvent {}或者带参数的消息public static class MessageEvent { public String message; public M...原创 2019-12-27 09:05:12 · 583 阅读 · 0 评论 -
Android 定时任务的四种实现
1.Thread.sleep()java Thread.sleep()实现定时任务2.Handler.postDelayedAndroid Handler.postDelayed实现定时任务3.Timer+TimerTaskjava Timer结合TimerTask执行定时任务4.ScheduledExecutorServicejava ScheduledExecuto...原创 2019-12-27 08:47:23 · 384 阅读 · 0 评论 -
Android Handler.postDelayed实现定时任务
直接上代码,原理就是在任务结束后一段时间再次开启下一次任务,不断循环实现定时器private Handler handler = new Handler();private Runnable task;private int delay = 1000;// 开启定时任务private void startTask() { stopTask(); handler.po...原创 2019-12-26 13:48:52 · 2496 阅读 · 0 评论 -
华为手机或平板开启应用Logcat日志打印输出
华为手机或者平板应用的日志打印默认是关闭的,只打印系统的日志,开发时需手动打开应用的日志输出。而且我用的华为平板M3每次关机或者过一段时间又会自动关闭应用日志输出,还需再手动打开,很是烦人。每当测试时出现bug闪退,到logcat里又看不到日志,情急之下忘了还要手动打开日志,真是束手无策。虽说关闭应用日志输出是为了不影响设备性能。华为手机打开日志打印打开手机拨号页面 输入*#*#2846...原创 2019-12-26 10:08:59 · 3719 阅读 · 0 评论 -
Android 杀死应用并重启
public static void restart(Context context) { // 获取启动的intent Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); PendingIntent restartIntent =...原创 2019-12-26 09:33:53 · 3023 阅读 · 0 评论 -
Android VideoView 播放视频
现在布局中添加VideoView控件<VideoView android:id="@+id/video_view" android:layout_width="match_parent" android:layout_height="match_parent"/>设置视频资源及播放private VideoView mVideoView;pu...原创 2019-12-25 21:10:51 · 406 阅读 · 0 评论 -
Android MediaPlayer播放音频
初始化MediaPlayer及加载音频资源,加载完成后开始播放private MediaPlayer mediaPlayer;private void start() { mediaPlayer = new MediaPlayer(); // 设置音量,参数分别表示左右声道声音大小,取值范围为0.0~1.0 mediaPlayer.setVolume(1f, 1f...原创 2019-12-25 20:04:04 · 470 阅读 · 0 评论 -
Android 监听U盘插入和拔出并获取U盘文件路径
首先实现一个接收U盘挂载和异常广播的BroadcastReceiverpublic class USBReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { StorageManager mStorageMan...原创 2019-12-25 19:37:13 · 4020 阅读 · 0 评论 -
Android 编译报XML declaration not well-formed错误的解决方法
项目上一秒还运行得好好的,下一秒编译却突然不成功,报如下错误FAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':app:mergeDebugResources'.> java.util.concurrent.ExecutionException: com.a...原创 2019-03-30 15:16:07 · 7341 阅读 · 3 评论 -
Android VideoView 循环播放视频
在Android VideoView 视频播放这篇文章中我们介绍了如何通过VideoView进行简单的视频播放现在有个需求,视频播放完成后需从头开始播放,无限循环但是发现VideoView控件并未提供loop等类似的设置循环播放的方法VideoView是MediaPlayer,在VideoView中持有一个MediaPlayer成员变量,可以通过该MediaPlayer设置循环播放...原创 2019-08-13 20:33:01 · 5316 阅读 · 0 评论 -
Android VideoView 视频播放
首先在布局文件中添加VideoView控件<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" a...原创 2019-08-13 20:10:18 · 445 阅读 · 0 评论 -
Android解决SoundPool只播放十几秒就停止播放的问题
问题描述项目中用SoundPool播放一段背景音乐,音乐时长大概一分钟,但是每次只播放了十几秒就停止了SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC,0);int soundID = soundPool.load(context, R.raw.sound, 1);soundPool.setOnLoadC...原创 2019-07-23 22:13:31 · 3294 阅读 · 5 评论 -
Android SoundPool循环播放
SoundPool适用于同时播放多个短促的音乐,如游戏的音效,支持单次播放、多次播放和无限循环播放源码以下源码的注释对loop参数说得很明白,总结如下:0表示不循环 -1表示无限循环(注意该情况需主动调用stop()方法停止播放) 大于0的值具体表示重复播放的次数,总的播放次数=loop+1(第一次播放加上重复播放的次数)SondPool源码开头中loop的相关说明 * &...原创 2019-07-23 20:47:50 · 1978 阅读 · 0 评论 -
Android SoundPool 最大同时播放音频量maxStreams简介
SoudPool的构造方法的第一个参数maxStreams表示当前SoundPool最大能够同时播放多少个音频,具体可以看如下SoudPool构造方法的源码/** * Constructor. Constructs a SoundPool object with the following * characteristics: * * @param maxStreams the m...原创 2019-07-23 20:20:08 · 1505 阅读 · 0 评论 -
Android SoundPool封装
SoundPool简介SoundPool常用来同时播放多个短暂的音频封装这里封装一个简单的SoundPlayer,模拟管理播放王者荣耀里的单杀、双杀、和三杀的音频,支持播放、循环播放、暂停、继续播放等功能所需的三个音频文件sound_single_kill、sound_double_kill、sound_triple_kill放置在/res/raw文件夹下public cla...原创 2019-07-23 19:45:52 · 880 阅读 · 0 评论 -
解决Could not find manifest-merger.jar问题
Android Studio编译的时候报如下错误ERROR: Could not find manifest-merger.jar (com.android.tools.build:manifest-merger:26.0.0).Searched in the following locations: https://jcenter.bintray.com/com/android...原创 2019-06-04 23:29:31 · 758 阅读 · 0 评论 -
解决Unable to resolve dependency for ‘:app@debugAndroidTest/compileClasspath‘问题
Android Studio有时候会抽风出现各种问题,有时候项目会报各种找不到类,但是编译运行按钮却可以按,而且可以成功编译安装应用,或者是报类似如下的问题Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath'一般都是Build->Clen Project可以解决大部分的问题若还是不行可...原创 2019-06-04 23:00:28 · 46503 阅读 · 11 评论 -
解决Unknown host 'jcenter.bintray.com'. You may need to adjust the proxy setting
有时候从GitHub上下的项目加载老半天依赖下不下来,主要报以下错误Unknown host 'jcenter.bintray.com'. You may need to adjust the proxy settings in Gradle.Enable Gradle 'offline mode' and sync projectLearn about configuring HTTP...原创 2019-06-04 22:11:40 · 15107 阅读 · 3 评论 -
Android Retrofit+RxJava 取消网络请求
可以通过Observer监听的onSubscribe回调方法中取得Disposable,然后通过Disposable对象来取消请求。实例代码如下private Disposable loginDisposable;public void request() { Retrofit retrofit = new Retrofit.Builder() .add...原创 2019-06-01 17:06:15 · 3092 阅读 · 5 评论 -
解决java.lang.IllegalArgumentException: Unable to create call adapter for io.reactivex.Observable问题
使用Retrofit2结合RxJava2的网络请求方式,请求的时候报如下错误,原因是adapter-rxjava包引用错了,由于用的RxJava2,所以用的依赖的adapter库也应该是RxJava2的,报错的原因就是依赖城RxJava1的adapter了06-01 16:20:12.373 25257-25257/com.him.hisapp E/AndroidRuntime: FATAL...原创 2019-06-01 16:37:37 · 12203 阅读 · 0 评论 -
Android Retrofit OkHttp添加Interceptor拦截器设置POST请求公共参数
private HttpServiceImpl() { OkHttpClient httpClient = new OkHttpClient.Builder() .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) // 对请求进行拦截处理,添加统一的请求头及打印请求报文和返回报文 ...原创 2019-06-01 16:16:24 · 3854 阅读 · 0 评论 -
Android Retrofit通过OkHttp添加Interceptor拦截器设置Get请求公共参数
pubic Retrofit getRetrofit() { OkHttpClient httpClient = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public Response inter...原创 2019-06-01 15:44:25 · 2167 阅读 · 0 评论 -
解决The armeabi ABI should have exactly one architecture definitions. Found: ''问题
在Android NDK开发编译过程中报如下错误The armeabi ABI should have exactly one architecture definitions. Found: ''这是因为在build.gradle文件中未配置cpu架构,配置下即可,如下所示android { defaultConfig { ndk { ...原创 2019-08-13 20:49:21 · 591 阅读 · 0 评论 -
Android解决ABIs [armeabi] are not supported for platform问题
Android NDK开发编译过程中报如下错误ERROR: ABIs [armeabi] are not supported for platform. Supported ABIs are [armeabi-v7a, arm64-v8a, x86, x86_64].Affected Modules: lib原cpu架构配置如下android { defaultConf...原创 2019-08-13 21:27:45 · 11341 阅读 · 0 评论 -
Android ScrollView代码实现滑动到最底部或最顶部
需求如下布局所示,我要实现的功能是一个log输出页面,用一个ScrollView来包裹显示log的TextView,当TextView内容显示满后,继续输出内容的时候自动将ScrollView滑动到最底部,显示最新输出的log<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http:...原创 2019-09-26 09:04:22 · 5395 阅读 · 1 评论 -
Android 删除aar包中的jar包解决Duplicate class包冲突问题
项目开发编译过程中报如下错误,排查后发现是因为Duplicate class com.google.gson.DefaultDateTypeAdapter found in modules gson-2.2.4.jar (com.xindecoiot.xdreader:zebra-scanner:2.4.6) and gson-2.8.5.jar (com.google.code.gson:...原创 2019-09-20 17:11:34 · 27333 阅读 · 6 评论 -
Android解决Could not find manifest-merger.jar问题
异常项目编译的时候报如下错误Could not find manifest-merger.jar (com.android.tools.build:manifest-merger:26.0.0).Searched in the following locations: https://jcenter.bintray.com/com/android/tools/build/man...原创 2019-09-18 16:40:36 · 781 阅读 · 0 评论 -
Android 解决PM Gradle sync failed:PM Syncing only active variant问题
异常项目编译的时候报如下错误3:21 PM Gradle sync started3:21 PM Source generation ended in 50 yr 5 mo 7 d 7 h 21 m 12 s 973 ms3:21 PM Project setup started3:21 PM Gradle sync failed: EventQueue.isDispatch...原创 2019-09-18 16:24:01 · 836 阅读 · 0 评论