- 博客(56)
- 收藏
- 关注
原创 锁屏简介
锁屏代码位置android4.4版本之前锁屏代码位于: frameworks\base\policy\src\com\android\internal\policy\impl\keyguard\ android4.4版本上锁屏代码位于: frameworks\base\packages\Keyguard\src\com\android\keyguard\ 并有单独的apk: /system/
2016-06-20 15:52:51 1430
原创 PorterDuff及Xfermode详解
使用Paint绘画的时候,需要对Paint设置渲染效果. 不同的渲染效果可以实现不同的叠加或者清除效果, PorterDuff.Mode为枚举类,一共有16个枚举值:1.PorterDuff.Mode.CLEAR 所绘制不会提交到画布上。 2.PorterDuff.Mode.SRC显示上层绘制图片 3.PorterDuff.Mode.DST显示下层绘制图片 4.PorterDuff.Mode.
2016-06-20 14:54:58 798
原创 开发稳定的应用的技巧
应用稳定性测试方法开发和维护Android应用程序几乎不可能没有bug, 但要想尽可能发现程序中的bug,需要系列强有力的自动化测试工具:随机事件测试: Monkey固定时间测试 MonkeyRunneruiautomatorMTBF(运行商认证使用此工具)固定功能测试:基于JUnit的TestCaseJava语法检查: Coverity(付费,静态和动态检查)FindBugs(E
2016-06-16 11:26:03 1022
原创 toolbar 和 statusbar
使用toolbar的时候需要设置AppTheme, 主要是对toolbar和statusbar的效果进行设置. 如果要两个看上去是浸入式的,没有分割线的. 就需要把两个颜色设为同样的.<resources> <style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar"> <item
2016-06-14 16:49:39 1361
原创 RecyclerView的使用
RecyclerView是优化后的ListView,使用起来非常简单.主要记录一下使用方法以及注意点 使用RecyclerView需要设定LayoutManager.一般有三种//线性布局,一行只有一个数据LinearLayoutManager//网格布局,可以制定一行有几列GridLayoutManager//增强版网格布局,可以制定水平还是竖直排列StaggeredGridLayou
2016-06-14 16:45:35 674
原创 gradle 编译脚本
以下是一个标准的gradle编译脚本,所有需要compile的lib版本不要比compileSdkVersion小apply plugin: 'com.android.application'android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationI
2016-06-13 15:58:42 675
原创 View的动画效果
想要实线View的平滑移动, 需要通过View的setTranslationY()和setTranslationX()方法.具体使用方法如下: @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, d
2016-06-12 15:45:11 559
原创 Android Studio搭建NDK
记录用Android Studio创建NDK工程的步骤创建APP工程.除了Acticity之外,添加一个NDK classpublic class JniLib { static { System.loadLibrary("JniLib"); } public static native String getNativeText();}通过以下命令生成jni的头
2016-06-08 17:31:40 431
原创 Dumpsys meminfo
1 Dumpsys meminfoThis command can be used to observe how your app’s memory is distributed to different types of RAM allocation.2 Command usageadb shell dumpsys meminfo <package_name or pid>3 Output s
2016-06-08 14:35:34 3478 1
原创 Competitor Heap Limit
Google Suggested minimal Java heap limit setting from chapter 3.7 of Android Compatibility Definition Document as below table. Although some devices might set higher heap limit than Google suggested mi
2016-06-08 14:22:08 389
原创 Multimedia memory
Multimedia memory guidelineMultimedia related app has more chances to allocate multimedia memory directly or indirectly such as camera, album, VideoHighlight, video player, music player. For example,
2016-06-08 14:08:40 975
原创 自定义ViewGroup和其子View
ViewGroup 初始化计算width,height。顺序如下05-13 13:41:57.649 D/GestureLockFred(32644): onMeasure 05-13 13:41:57.649 D/GestureLockFred(32644): onMeasure 05-13 13:41:57.719 D/GestureLockFred(32644): onMeasure 0
2016-05-18 11:57:45 2629
原创 如何添加媒体类型和对应的编解码器
Stagefright中OMXCodec中根据Extractor中的MIME创建对应编解码器组件的流程如下: 所有支持的编解码类型都是在AwesomePlayer初始化的时候就创建好的. 硬编解码器从hardware/XXX/media/libstagefrighthw/libstagefrighthw.so中加载 软编解码器从frameworks/av/media/libstagefrigh
2016-04-25 15:49:08 1882
原创 Stagefright中OMX的数据传输流程
OMXCodec创建完边解码组件之后, 需要对每一个port口进行buffer的分配.主要流程如下 需要对OMXCodec中buffer的管理说一下:struct BufferInfo { IOMX::buffer_id mBuffer; //BufferInfo的唯一标示 BufferStatus mStatus; //OWNED_BY_US OWNE
2016-04-25 15:38:21 1189
原创 Intent启动Activity的Flag
除了常用的flag之外, 主要记录一下容易忘记,但很重要的flag. 1, FLAG_ACTIVITY_NEW_DOCUMENT这个flag的在Api21以前是FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET. 主要作用就是当Activity所在的Task被reset之后, 使用此Flag 发送Intent的Activity实例之上的所有Activity都会被销毁. 一个很典型
2016-03-10 11:53:03 667
原创 Activity的四种启动模式-SingleTask和SingleInstance
四种启动模式经常忘记, 在这里用例子记录下. 两个Activity用来测试,分别是TaskOne 和 TaskTwo. TaskOne有两个Activity, 代码如下:public class ActivityOne extends Activity implements View.OnClickListener{ private static final String TAG = "
2016-03-08 15:19:15 1702
原创 Android layout_weight 属性解密
在LinearLayout中使用 android:layout_weight,常常不能得到想要的结果,现在详细解密一下。我们都知道,初始化view的时候会调用如下方法进行height 和 width的设置。@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){//widthMeasureSp
2015-12-18 11:43:23 558
原创 选择图片剪切功能
从媒体数据库读取图片文件并剪切。 选择图片如下:Intent intent = new Intent(Intent.ACTION_GET_CONTENT);intent.addCategory(Intent.CATEGORY_OPENABLE);intent.setType("image/*");startActivityForResult(intent, REQUEST_CODE);获得的
2015-11-23 20:19:05 572
原创 AIDL Service 的使用
本文主要介绍怎么实现AIDL service并且添加回调。 1.需要定义两个AIDL interfaceITestService为测试的service, ITestCallback 为回调的结果。// ITestService.aidlpackage com.htc.soundrecorder;import com.htc.soundrecorder.ITestCallback;// Decl
2015-11-13 17:50:30 624
原创 Android min, max, targetSDK详解
使用方法<uses-sdk android:minSdkVersion="integer" android:targetSdkVersion="integer" android:maxSdkVersion="integer" />minSdkVersion指明APP能够安装的系统API的最低版本。如果系统API版本小于这个值,APP将无法安装。 这个值必须声
2015-11-13 11:54:57 2149
原创 同时获取Camera预览和录像视频流
介绍除了默认的Preview数据流之外,增加录像数据流。要求同时获取,并能够支持不同的分辨率。 1. 描述高通平台支持同时获取Preview和录像,要获取双路视频流的话,除了Android系统默认支持获取Preview的数据流外,只需要在软件层面增加获取录像数据流的操作。以下详细介绍如何获取录像的数据流,Preview不做介绍。2. 分析首先,camera AF层基本的框架图如下: Camer
2015-11-13 09:53:34 9050 4
原创 Android App相关的读写路径
Android 4.4之后internal的路径就不需要权限了。没有权限的时候,可以看一下External是否可读Log.d(TAG, " ExternalStorageWritable: " + isExternalStorageWriteable());Log.d(TAG, " ExternalStorageEReadable: " + isExternalStorageReadable()
2015-11-11 11:43:10 2412
原创 录音计时的TimeView
介绍继承View实现计时功能的视图继承View的子类必须有自己的构造函数public class TimeView extends View{ public TimeView(Context context) { super(context); //初始化资源 init(context); } public TimeVi
2015-11-10 19:44:49 1350
原创 dp, dpi, ppi, sp, px 详细介绍
参考资料 http://www.zhihu.com/question/21220154/answer/18584739 http://mp.weixin.qq.com/s?__biz=MjM5NTA0NjY4MA==&mid=203073243&idx=1&sn=c71ff9f0c0fb96fea2d3ea2b213018e1#rd概念解释dpi是dot per inch,每平方英寸多少
2015-11-10 19:02:25 678
原创 读取屏幕参数的方法
提供几种方法获得屏幕参数, 包括分辨率,像素密度,伸缩密度1.通过WindowManager获得默认的显示参数WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);Display display = wm.getDefaultDisplay();Log.d(TAG, " X: " + display.
2015-11-10 15:01:27 1684
原创 录音计时的实现方法
录音中需要显示录音长度,显示需要按S录音start的时候记下当时的时间mStartTimeStamp = System.currentTimeMillis();mStartTimeStamp 为录音开始时间。 录音的时间通过Handler发送。times为和开始时间的差距。long currentTimeStamp = System.currentTimeMillis();long times
2015-11-09 19:56:21 1257 1
原创 多用户
检查当前用户用户是否是ownerboolean isOwner = false;UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);if (um != null) { UserHandle userHandle = android.os.Process.myUserHandle();
2015-11-07 19:38:29 752
原创 Input:Key Logs
07-29 13:27:43.584 989 1072 W InputDispatcher: channel ‘425911c8 com.android.settings.Settings (s)’ ~ Consumer closed input channel or an error occurred. events=0x9 //0x9= ALOOPER_EVENT_INPUT (1)
2015-11-07 15:10:42 590
原创 Android Framework tips
Dump Device InfoDump surface informationadb shell dumpsys SurfaceFlingerDump window information1. dump windowadb shell dumpsys window2. dump window with detailsadb shell dumpsys window all3. dump v
2015-11-07 14:37:37 740
原创 Android Download status code
Download 相关status定义在 frameworks/base/core/java/android/provider/Downloads.java packages/providers/DownloadProvider/src/com/android/providers/downloads/Constants.javaAOSP DefineSTATUS_WAITING_FOR_NETW
2015-11-07 14:18:34 553
原创 Android Security Model
Android security model are based on: - Linux 基于用户的保护 Linux user-based protection - 保证APP对系统中其他进程的绝缘,APP不应该被其他APP或者进程直接读写数据或内存 - root 和系统进程是最常受到恶意攻击,所以保持最小数量的root和系统进程对于安全设备是至关重要的 - APK签
2015-11-07 12:16:30 1117
原创 Android ADB
1,df 查看分区情况Filesystem Size Used Free Blksize /dev 934.3M 48.0K 934.3M 4096 /sys/fs/cgroup 934.3M 12.0K 934.3M 4096 /mnt/asec
2015-10-29 15:58:12 365
原创 Android 积累
1,获取Tele Service并获取当前手机是否处于来电状态(FW层)TelecomManager telecomManager = getTelecommService();if (telecomManager != null && telecomManager.isRinging()) { Log.i(TAG, "Ignoring HOME; there's a ringing in
2015-10-29 15:55:22 365
原创 条件操作符和sizeof操作符
1. 条件操作符条件操作符是C++中唯一的三元操作符,它允许将简单的if-els判断语句嵌入表达式中。条件操作符的语法格式为:cond ? expr1 ; expr2;1.1 避免条件操作符的深度嵌套int max = i > j ? i > k ? i : k ? j > k ? j : k;可以用更长但更简单的比较语句实现相同的功能:int max =
2015-10-29 15:51:57 430
原创 Android onClick
在layout中直接声明onclick方法:<Button android:id="@+id/button_capture" android:layout_width = "fill_parent" android:layout_height="wrap_content" android:layout_gravity = "bottom" android:o
2015-10-29 15:47:50 653
原创 YUV420SP和YUV420SP32M的区别
在高通8916和8974平台上使用camera录像的时候,录像的格式是CAMERA_YUV_420_NV12。此格式对应的YUV格式是YUV420SP32M。YUV32SP对应的大小:W * H * 3 / 2 YUV420SP32M这样的存储方式对应的文件存储格式以及大小计算方式如下:#ifndef __MEDIA_INFO_H__#define __MEDIA_INFO_H__#ifndef
2015-10-29 15:45:34 838
原创 动态 内存管理
new和delete表达式 定义变量时,必须制定其数据类型和名字。而动态创建对象时,只需指定其数据类型,而不必为该对象命名。取而代之的是,new表达式返回指向新创建对象的指针,我们通过该指针来访问此对象。int i; int *pi = new int;这个new表达式在自由存储区中分配创建了一个整型对象,并返回此对象的地址,并用该地址初始化指针pi。动态
2015-10-29 15:40:03 364
转载 Android SurfaceTexture
SurfaceTexture是从Android3.0(API 11)加入的一个新类。这个类跟SurfaceView很像,可以从camera preview或者video decode里面获取图像流(image stream)。但是,和SurfaceView不同的是,SurfaceTexture在接收图像流之后,不需要显示出来。有做过Android camera开发的人都知道,比较头疼的一个问题就是,
2015-10-29 15:36:36 1054
原创 Android 搭建系统服务
本文以系统中已经有的LightsService为例,逐步讲解在系统中搭建系统服务的过程。有几个前提需要说明: 1.由于系统内部就有LightsService这个类(在原生的代码中,它并不是一个真正的服务,只是一个普通类),所以我们无需再建立此类,并且可以根据此类的内容确定需要提供的服务内容。 2. 此处LightsService中需要提供的服务主要是将Light(内部类)的一些操作提供出去
2015-10-29 15:32:17 722
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人