Android应用开发
小贺就是我
做一枚帅帅的全栈开发者
展开
-
TTS在Android中的简单使用
TTS在Android中的简单使用具体使用方法如下创建TextToSpeech对象,同时传入OnInitListener监听是否成功为tts设置语言播放文本 代码如下:package com.example.testtts;import android.speech.tts.TextToSpeech;import android.support.v7.app.AppCompatActiv原创 2017-03-29 23:08:56 · 5544 阅读 · 1 评论 -
Android studio使用技巧(一:快捷键和断点调试)
一:好用的快捷键ctrl+N 在项目中快速查找某个类alt+F7 查找某个类、方法被引用的位置,或选中后右键选择find usage双击shift 全局搜索ctrl+alt+空格/ctrl+空格 快速代码补全ctrl+alt+M 提取代码块为方法ctrl+alt+f 提取变量为常量二:如何打各种不同的断点条件断点 :在打断点时,如果处在一个循环中,只想让某个条件满足才断的话,就在断点处原创 2017-04-30 01:42:18 · 4729 阅读 · 0 评论 -
如何将YUV的byte数组转换为bitmap
//srcData为原始的yuv数组,format为YUV的格式YuvImage yuv = new YuvImage(srcData, format, width, height, null); ByteArrayOutputStream stream = new ByteArrayOutputStream(); yuv.compressToJpe原创 2017-04-24 16:58:39 · 2556 阅读 · 0 评论 -
Android开发中常见adb命令的使用
前言:在Android开发中,使用adb命令是一个必备的技能,adb使用的情景有很多,比如,要测试自己写的Service或者BroadcastReceiver,直接使用adb命令来发广播或者开启服务,还有如果要看log,但是有时由于IDE的原因,log没有抓到,这是可能就需要用adb 来保存并查看log。一 :adb命令操作文件adb remount:重新挂载分区(操作系统目录之前必须执行)adb原创 2017-04-21 16:21:19 · 579 阅读 · 0 评论 -
dagger2的配置及基本使用(一)
一、配置:1.1 在Project的gradle脚本中配置 dependencies { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' }1.2在Module的gradle脚本中配置apply plugin: 'com.neenbedankt.android-apt'dependencies {ap原创 2017-08-01 15:48:34 · 1090 阅读 · 0 评论 -
Dagger2中@dependencies和@Subcomponent以及懒加载的使用
一、dependencies的使用 顾名思义,就是依赖,如果Acomponent想使用别的Bcomponent管理的实例,那么就可以直接让Acomponent去依赖Bcomponent,就能直接使用B所管理的实例了,例子如下:1.1:建立实体类,并创建它的module和componentpublic class Food { public void eatFood(){原创 2017-08-04 09:31:18 · 805 阅读 · 0 评论 -
Xutils3使用全解析
初始化及注解:x.Ext.init(this);//是否开启log,开启后将影响性能x.Ext.setDebug(true);注解的使用:①//绑定空间及布局文件@ContentView(R.layout.activity_main)public classMainActivity extendsAppCompatActivity {@ViewInj原创 2017-08-05 09:40:45 · 969 阅读 · 0 评论 -
Android6.0运行时权限浅析
Android在6.0之后加入了运行时权限,权限分为一般权限和危险权限,Android系统总共有百余种权限,那么怎么区分哪些是一般权限哪些是危险权限呢,其实危险权限并不是很多,总共9组24个,这里,这里是按组分的,只要申请了某一组的其中一个权限,那么就拥有了整组的权限。一:哪些是危险权限下图是所有的危险权限,共9组24个 二:具体使用2.1、检查权限 int result = Activity原创 2017-08-05 10:08:59 · 234 阅读 · 0 评论 -
Error: …… ,Manifest merger failed with multiple 解决方案
从Eclipese导入工程报了这个错,多方查找解决方案,终于找到一种靠谱的,并记录下来。这时候要看你的清单文件哪里写错了。点击清单文件左下角的Merged Manifest,可查看具体的错误。 查看具体的错误,然后修改,最后ReBuild一下就解决问题了。原创 2017-10-07 11:00:05 · 349 阅读 · 0 评论 -
Retrofit2极简教程
注:使用之前先依赖retrofit(compile'com.squareup.retrofit2:retrofit:2.1.0'compile'com.squareup.retrofit2:converter-gson:2.1.0'),定义好接口后,先进行初始化,以下是代码,所有请求的方法最好写在一个接口中retrofit= newRetrofit.Buil原创 2017-12-04 12:00:00 · 260 阅读 · 0 评论 -
Android studio使用技巧(二:国际化以及代码重构)
一:如何在Android中快速实现国际化 Android中的国际化实际是string.xml文件的国际化,我们来看看具体的实现过程:1.1 . 打开 res->values->string.xml文件1.2 . 点击右上角的Open Editor 1.3 .在Editor的编辑区,点击左上角的地球符号,选择一个语言,这时就会在res文件夹下生成对应的国际化values 文件夹了 二:原创 2017-05-01 01:03:39 · 1522 阅读 · 0 评论 -
CarRecorder源码解析二(循环录像分析)
循环录像的整体逻辑比较简单,但代码还是比较复杂的,逻辑是刚开机就开始循环录像,每两分钟通过MediaRecorder录制一段视频,当视频所占内存卡的大小到达某一个预设的值时,开始自动删除最老的视频。## 一:如何实现开始结束开始的逻辑的?循环录像的入口在surfaceView的生命周期onCreate中 当surfaceView创建的时候,初始化VideoRecorder,在此时开始循环录像。原创 2017-05-10 16:12:18 · 1580 阅读 · 1 评论 -
CarRecorder源码分析(一)随拍随录
主体结构:行车记录仪的代码逻辑全部放在PreviewService中,UI显示也在其中,UI的显示只是在Service中,通过WindowManager实现的,MainActivvity没有什么作用。MainActivity中的业务逻辑:### 1//在onCreate中启动服务,在服务里面根据action来显示UI Intent intent = new Intent(MainAct原创 2017-04-25 14:37:51 · 2426 阅读 · 2 评论 -
Android Studio下的JNI使用全解析(一)
一:创建工程1.1 创建新的工程时勾选上Include c++ support,然后一路next 勾选的目的是为了写C代码时有代码提示1.2 创建完毕之后修改CMake你要生成的so库的名称 1.3 把Src/main/cpp文件夹下默认生成的c文件删除,并把MainActivity中默认生成与JNI有关的代码删除,然后Build->clean Project二:环境配置2.1 在lo原创 2017-05-25 12:22:57 · 410 阅读 · 0 评论 -
Android studio使用JNI全解析(二)
上一篇文章中我们介绍了如何使用JNI,包括环境配置,如何编译C代码变成so库,java如何来调等,那么每次我们要使用C代码时都要在Android工程中编写C代码吗?当然不是,我们只需要使用最终的产物,so库就可以了,我认为使用NDK就只有一个作用,就是把so库生产出来。那么这一篇我们就着重介绍如何使用so库。一:相应配置1.1 在工程的main 目录下新建jniLibs目录,注意这里java和j原创 2017-05-29 20:01:31 · 331 阅读 · 0 评论 -
进程保活-双进程守护的正确姿势
做车机的开发免不了在后台开很多服务,做车机的APP跟做普通的手机APP区别在于做车机要用到很多的进程间的通信交互等,一个应用死了,可能导致整个机器都运转不正常了,不会进程间的通信怎么可以,撸起来!双进程守护,肯定得用到多进程,一个应用可以有多个进程的,如何实现多进程呢,service或者activity等都有一个属性android:process,只要设置起名称就可指定该组件运行在该进程中。在这里原创 2017-07-17 20:05:26 · 1314 阅读 · 0 评论 -
进程保活-将Service设置为前台服务
引言:在Android系统中,进程是有优先级的,具体请Google或百度,当系统的内存不够的时候,就会杀死优先级较低的应用,但由于实际的业务需求,有些服务是不能杀死的,比如我们微信接收消息的服务,这时我们就需要提高进程的优先级来防止后台服务被杀死。具体代码如下//传入notifycation对象的作用是,当将服务设为前台服务后,会在状态栏显示一条通知public void showCXBRunn原创 2017-03-31 15:27:51 · 2584 阅读 · 0 评论 -
使用ButterKnife时的配置
ButterKnife使用方法很简单,但是之前对配置不是很熟悉,没使用成功过,看了刘望舒写的Android进阶之光,还是比较详细的,把使用的配置记录一下,以免后面再踩坑。一:在project的gradle中配置“` dependencies { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'}“`二:在mo原创 2017-08-01 11:37:33 · 178 阅读 · 0 评论 -
Gradle签名打包
一:生成签名步骤如下: 点击build->Generate Signed APK 再选择一个新的签名,路径最好是当前项目的根目录 点击OK,稍等片刻,就会在你指定的位置生成一个签名文件,后缀名为.jks使用gradle自动签名打包步骤如下: 打开项目结构面板,可点击File–>Project Structure,也可点击工具栏对应的图标,都可以打开 打开后,选择对应的module,选择原创 2017-05-12 15:43:27 · 1847 阅读 · 0 评论 -
Gradle自定义项目结构
一:项目如何实现eclipse和Android studio的兼容 在Android开发中,很多老项目都是使用eclipse开发的,但为了开发的便捷性,我们要使用Android studio,问题来了,一个项目如何兼容Android studio和eclipse?Gradle的基本项目结构起始于main,我们只要在gradle脚本中具体指定各个资源的路径就可以了,比如java文件,资源文件,清原创 2017-05-12 10:45:33 · 1150 阅读 · 0 评论 -
Gradle初探
一:Project和Module中的gradle脚本的基本格式一:project的gradle脚本如下:buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' // NOTE原创 2017-05-11 23:15:06 · 180 阅读 · 0 评论 -
数据库框架Litepal极简教程
一:初始化①在gradle脚本中添加依赖dependencies { compile 'org.litepal.android:core:1.4.1'}②:在main-->assets中新建litepal.xml文件xml version="1.0" encoding="utf-8"?>litepal> dbnamevalue="demo" /> ver原创 2017-12-05 10:56:40 · 516 阅读 · 0 评论