Android学习
ItJavawfc
饮冰十年,难凉热血!
展开
-
Mac AnroidStudio 多渠道打包问题
问题Mac 升级后配置多渠道打包,命令打包失败,如下:Could not find tools.jar 问题处理AS 直接报错:Please check that /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home contains a valid JDK installation.解决方案首先查看JDK路径:查看 JDK 位置的命令 /usr/libexec/java_home -V(升级 OSX11.0.原创 2021-06-23 11:21:41 · 268 阅读 · 0 评论 -
Android组件Service学习
Android中四大组件Service的理解,笔记为自己试验思考所得,值得参考。原创 2014-11-27 19:19:58 · 930 阅读 · 0 评论 -
Android中实现卸载、启动、分享功能
代码非常简单:对于卸载需要看一下系统源码,在package-->app-->下的Launcher2里面看一下配置文件,里面有相关配置 对于启动,看一下得到包管理器后,用一下API即可实现 分享功能:运用的是Activity的API,即可实现。分享功能实际上是将数据用放在intent中,原创 2015-01-11 16:49:39 · 895 阅读 · 0 评论 -
runOnUiThread更新主线程
更新UI采用Handle+Thread,需要发送消息,接受处理消息(在回调方法中处理),比较繁琐。除此之外,还可以使用runOnUiThread方法。利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。 Runnab原创 2014-12-26 00:00:31 · 1291 阅读 · 0 评论 -
Android 4.0及以上版本接收开机广播BOOT_COMPLETED、开机自启动服务
情景概要:自己做的一个项目的时候,或得不到开启启动的通知,这样更别说开机启动通知里面实现开机服务功能了,查找了N多资料,说法不一,太多的人说4.0之后无法获得开机通知,通过各种渠道,各种大牛的方式仍然是那些N多人说不可行的方法,即使大牛给的是英文文档也是说这样可以的。 最后发现,开启启动通知已经实现了,但是自己的疏忽没有发现,我通过在通知里面弹出一个Toast,但是真机或者模拟器在开机的时候都需要很多启动项,导致最后的Toast弹出很晚,而自己却没看见。你可以在通知里面弹出10个以上的Toas原创 2014-12-12 15:54:02 · 2739 阅读 · 0 评论 -
Android将Assert中文件复制到数据库 Java中将a文件内容复制到b文件
需求,将数据库**.db文件复制到 /data/data/包名/files文件中去,作为数据库使用 将a文件内容复制到b文件中去 【知识的简单回顾:将文件I/O流的输入输出流的使用--》copy】代码如下:/* * //path 把address.db这个数据库拷贝到data/data/包名/files/address.db *原创 2015-01-21 15:23:17 · 1340 阅读 · 0 评论 -
versionCode与versionName的区别、应用、获取
Android的版本可以在androidmainfest.xml中定义,主要有android:versionCode和android:versionNameandroid:versionCode:主要是用于版本升级所用,是INT类型的,第一个版本定义为1,以后递增,这样只要判断该值就能确定是否需要升级,该值不显示给用户。android:versionName:这个是我们常说明的版本号,原创 2015-04-26 10:53:31 · 14101 阅读 · 0 评论 -
在Android中使用HandlerThread创建线程
最近用到了HandlerThread,尽管目前一般需要线程的时候很少用HandlerThread,但是在一些场景下还是比较好用的。 在android开发中,一说起线程的使用,很多人马上想到new Thread(){…}.start()这种方式。 这样使用当然可以,但是多次使用这种方式,会创建多个匿名线程。使得程序运行起来越来越慢。 因此,可以考虑使用一个Handl原创 2016-04-11 01:39:19 · 866 阅读 · 0 评论 -
集成科大讯飞TTS【离线语音合成服务】
背景:最近机器人项目需要集成科大讯飞TTS服务,遇到各种坑。集成过程中主要遇到:引擎相关错误【21001|21002|25107错误】**解决方法:**1.多去论坛上面搜相关帖子;2.仔细看看提供的Demo中是怎么实现与配置离线语音合成功能的;3.理解引擎这个玩意集成问题:下载离线语音合成体验版,放到IDE中跑起来,你会发现基本上跑Demo的离线语音合成没有成功的,偶尔成功。【仔细分享原因,个人觉得原创 2016-08-25 06:22:03 · 9683 阅读 · 0 评论 -
Retrofit2.0使用
随着Google对HttpClient 摒弃,和Volley的逐渐没落,OkHttp开始异军突起,而Retrofit则对okHttp进行了强制依赖。Retrofit是由Square公司出品的针对于Android和Java的类型安全的Http客户端,如果看源码会发现其实质上就是对okHttp的封装,使用面向接口的方式进行网络请求,利用动态生成的代理类封装了网络接口请求的底层,其将请求返回javaBea原创 2016-07-17 00:28:16 · 3373 阅读 · 0 评论 -
理解Gradle
一、什么是Gradle 简单的说,Gradle是一个构建工具,它是用来帮助我们构建app的,构建包括编译、打包等过程。我们可以为Gradle指定构建规则,然后它就会根据我们的“命令”自动为我们构建app。Android Studio中默认就使用Gradle来完成应用的构建。有些同学可能会有疑问:”我用AS不记得给Gradle指定过什么构建规则呀,最后不还是能搞出来个apk。“ 实际上,转载 2016-06-27 12:45:32 · 1088 阅读 · 0 评论 -
Android 重写系统Crash处理类,保存Crash信息到SD卡
借鉴:http://blog.csdn.net/xiaanming/article/details/9344703 场景:需要根据本地、服务器端日志查看程序崩溃日志,提高程序稳定性步骤: 1.加权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />2.Application中初始化【两原创 2016-05-17 01:42:59 · 756 阅读 · 0 评论 -
自动批量安装APK
以下是借鉴别人的脚本,自动按照多个apk到设备中去。亲测: 脚本如下:@ECHO off @REM 将adb.exe添加到PATH中 ECHO 初始化… @SET PATH=%PATH%;%CD%\Adb @REM SET PATH @REM 无限循环的标签 :LOOP ECHO 等待您插入手机… adb wait-for-device @REM 循环安装本目录下的原创 2016-05-03 01:41:13 · 6776 阅读 · 0 评论 -
Android 系统相册不可见问题
最近做一个摄像机的app,遇到这个问题,记录一下。 场景:捕获系统相机照相返回的Byte[],最终转文件图片保存到手机文件加下。**问题:**1)系统相册中找不到上述保存的图片;2)通过windows下一步步找到手机保存图片文件夹和图片文件,找不到。3)手机文件目录可以找到存储图片的文件夹和文件夹下的大量图片。**分析总结:**Android系统下,代码中生成的图片,需要及时更新文件夹和图片。扫面原创 2016-04-25 20:41:19 · 1606 阅读 · 0 评论 -
Android 状态栏的动态显示和隐藏
项目中经常需要隐藏状态栏和titleBar,下面借鉴别人的博客,增加自己的一些小经验。工作会常用到!一)View类提供了setSystemUiVisibility和getSystemUiVisibility方法,这两个方法实现对状态栏的动态显示或隐藏的操作,以及获取状态栏当前可见性。setSystemUiVisibility(int visibility)方法可传入的实参为:1. View.SYST原创 2016-04-25 20:18:38 · 3217 阅读 · 0 评论 -
AIDL
官网地址详解分析: http://developer.android.com/guide/components/aidl.html 一)什么是AIDL –》 应用场景 –》 为什么用它–》什么情况下试用 个人理解: aidl应用接口编程语言 因为android系统中的不同程序都有自己的jvm,不同程序之间是不能直接访问对方memory的,为了安全,彼此解耦,一个程序崩溃不至于对原创 2016-04-21 02:47:58 · 1915 阅读 · 0 评论 -
打开系统程序
打开系统程序原创 2016-04-11 00:45:55 · 890 阅读 · 0 评论 -
fragment基础【替换、传值、回掉】
总结知识点:fragment的替换、fragment调用activity中的参数和组件、activity调用fragment中的参数、回掉监听事件1.fragment的替换。先看下面的一张图,应用场景【左边不同位置的单击事件,在右侧显示不同的内容:音乐歌词播放器--》对应歌曲曲目列表和曲目信息】需要掌握:会FragmentTransaction的相关方法、了解FragmentM原创 2016-01-07 02:48:08 · 1707 阅读 · 0 评论 -
异步并发保持数据一致性
问题背景:项目中不断切换界面的过程中网络异步请求【耗时操作】,但是数据并未加载完成,此时界面中触碰事件时候,直接崩掉【频率低但存在】。解决思路:监听异步操作完成后才让界面上的按钮可以响应单击【触碰】事件,数据在加载完成前,界面上的按钮触碰事件都应该被屏蔽掉。原创 2015-12-30 03:27:13 · 4989 阅读 · 0 评论 -
APP字体大小,不随系统的字体大小变化而变化的方法
经过设置后:用户在Setting-->字体设置里面设置字体大小后,字体大小将不会改变。 从android4.0起系统设置的”显示“提供设置字体大小的选项。这个设置直接会影响到所有sp为单位的字体适配,所以很多app在设置了系统字体后瞬间变得面目全非。下面是解决方案 Resources res = getResources();Configuration config=new Co转载 2015-12-29 00:50:36 · 1318 阅读 · 0 评论 -
android获取手机配置具体代码
Code如下:StringBuilder phoneInfo = new StringBuilder(); phoneInfo.append("Product: " + android.os.Build.PRODUCT + System.getProperty("line.separator")); phoneInfo.append( "CPU_ABI: " + android.os.Bu原创 2015-12-25 12:37:17 · 1392 阅读 · 0 评论 -
anr,多线程,handler
应该了解的知识:1.什么是进程、什么是线程2.为什么要使用多线程3.Handler机制4.Handler原理什么是进程、什么是线程进程是一个程序的完全执行,包括了程序和程序需要的资源,是分配资源的基本单位;线程是独立运行和独立调度的基本单位,一边听歌一边打字一边玩游戏看似是同时进行实际上是CPU运行时候,快速切换资源,让用户感觉是同时进行的,我们可以将线程理解为原创 2015-12-20 19:42:40 · 1007 阅读 · 0 评论 -
AndroidViewPager监听最后的Item和第一个Item
项目中遇到这样问题: 服务器端有N道题【很多】,每次通过ID获取十道题目,那么当我的viewPage中的viewPager.getCurentItem()=9的时候,那我继续滑动viewpage人就需要重新获取数据。实现思路:要么重新定义ViewPager,监听左右滑动判断方向,根据getCurrentItem来判断;要原创 2015-12-01 01:07:41 · 1925 阅读 · 0 评论 -
Android日志收集
Android日志管理工具自行百度、谷歌、eoe、android巴士。目的:收集到日志后--》返回到服务器、保存到SD卡、数据库、文件等。最基本的是将日志从logcat.exe中收集出来。运行程序后,在cmd中输入 adb logcat 【参数】可以看到相关日志信息。private void readLog() throws IOException { Log.i("原创 2015-10-17 02:30:06 · 1611 阅读 · 0 评论 -
PinnedHeaderListView
看了一下PinnedHeaderListView,实现通讯录,城市列表、具有相同字母属性的ListView列表功能,给用户比较好的惊喜体验。看看效果后在看看例子源码,最后看看系统自带源码,可以实现你想要的ListViewUI效果。其中可以按照例子,修改Adapter即可实现微信的联系人效果。图三图四实现了添加搜索框功能,可以借鉴学习。原创 2015-08-17 09:30:50 · 919 阅读 · 0 评论 -
Android SwipeRefreshLayout 官方下拉刷新控件介绍—Handler原理—Adapter总结
参考博客:http://blog.csdn.net/lmj623565791/article/details/24521483自己敲了下代码,这个方式刷新确实给人耳目一新的感觉。资源:含有两个SwipeRefreshLayout实战的Demo,http://download.csdn.net/detail/itjavawfc/8847339用起来非常好用:看看文档几个重要的方法,简单拿来用原创 2015-06-28 15:21:47 · 1640 阅读 · 0 评论 -
Runtime.getRuntime().exec()----记录日志案例
Runtime.getRuntime().exec()方法主要用于执行外部的程序或命令。Runtime.getRuntime().exec共有六个重载方法:1.public Process exec(String command)在单独的进程中执行指定的字符串命令。2.public Process exec(String [] cmdArray)在单独的进程中执行指定命令和变量原创 2015-06-28 01:24:44 · 12343 阅读 · 0 评论 -
Linux中拷贝 cp命令中拷贝所有的写法
今天在编写一个脚本的时候,发现一个比较奇怪的问题:就是在使用cp拷贝当前目录下所有文件到目标目录的时候,源和目标目录大小不同。原来一直没有留意有这样的问题,后来查了些资料,才知道以前一直使用的格式有误,一、预备 cp就是拷贝,最简单的使用方式就是:cp oldfile newfile但这样只能拷贝文件,不能拷贝目录,所以通常用:cp -r old/ new/那就会把old目录整个拷贝到new目录原创 2016-12-30 01:17:22 · 4664 阅读 · 0 评论 -
Android Fragment切换解决方案之FragmentTransaction
fragment切换?不就是Viewpager+fragment吗?是的这是很大多数App采用的切换的组合方式。但是Viewpager+fragment切换的的生命周期十分混乱,这就是会引发很多的坑!如果在一些不需要切换的动画的情况下,采用FragmentTransaction动态切换是一个不错的选择先来看看有哪些切换的方案吧。又有哪些问题: (一)预先写在布局里面 布局文件<LinearLay原创 2017-03-15 01:03:48 · 6772 阅读 · 0 评论 -
运用插件直接Android studio打包jar
AndroidStudio 和Eclipse将资源文件打包成jar包方法是不一样的,AS不像Eclipse那么直接!基本上都是在build.gradle 文件中新建一个task.网上有很多的方法,下面介绍一种插件,直接打包OK!插件使用 既然标题说了这是一个通用的打包jar插件,那么一些基本特性,如过滤包名,指定包名等是必须要支持的,目前该插件支持特性如下:按需打包jar:原创 2017-03-15 15:49:16 · 3722 阅读 · 0 评论 -
Butterknife 在module中使用
场景:大型项目中基于module开发,在commonLib下使用Butterknife配置后,如何在依赖于commonLib的module中也可使用直接给出项目中对应的配置,如下:Application的build.gradle中:classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'classpath 'com.jakewhart原创 2017-08-02 07:07:27 · 1880 阅读 · 0 评论 -
Android 分析Android单个进程内存信息
dumpsys 经常用的几个命令:adb dumpsys cpuinfo 查询cpu信息 adb dumpsys cpuinfo packageName 查询单个程序CPU使用信息信息 adb shell dumpsys meminfo packageName 查询单个程序原创 2017-07-18 01:04:46 · 4310 阅读 · 0 评论 -
adb必备命令
最近联调硬件唤醒,会和硬件联调,偷学了几个命令。场景:安装驱动,杀死进程【一般程序安装不了的解决方案一】,捕获内核log信息原创 2016-05-19 01:46:44 · 1855 阅读 · 0 评论 -
机器人项目部分数据本地化——工厂模式+策略模式实现
场景:机器人设备上展示的首页数据、其它模块数据均通过后台配置,机器人端获取数据保存,下次判断相关数据有无从本地获取,机器人设备端只负责展示并执行点击事件弊端:机器人环境下特别刚开机对网络存在需求,弱网情况下经常性数据无法获取,机器无法正常运行【各种展会弱网情况明显】解决方案:所有数据采用本地配置化。 具体方案:本地数据以Json数据存储在.json文件中,读取后转换成JavaBean的集合即可。【此原创 2017-09-20 20:20:15 · 5963 阅读 · 0 评论