Android手札
文章平均质量分 97
详细讲解Android开发过程中的点点滴滴, 包括四大组件、多媒体、网络通信、NFC等
小小工匠
show me the code ,change the world
展开
-
Android获取SDK的版本信息
int sdkVersion = Integer.valueOf(android.os.Build.VERSION.SDK);原创 2015-11-24 09:05:28 · 10950 阅读 · 0 评论 -
Android获取相册中图片的路径 4.4版本前后的变化
两个问题: 1. 通过调用系统Action,从图库中选择图片,并展示到界面上 2. API19前后获取相册图片路径的不同详见(仅客户端代码),请移步:本人GITHUB原创 2015-11-24 17:46:24 · 12202 阅读 · 0 评论 -
Android-上传图片(-)_HttpURLConnection
继选择图片相册并通过ImageView展示在Activity中,获取到图片真实路径后(详见Android获取相册中图片的路径 4.4版本前后的变化), 将通过以下两种方式(当然了不止这两种)将获取到的图片上传到服务端,仅涉及客户端代码部分。使用HttpURLConnection的方式模拟拼装HTTP请求使用HttpClient(6.0已经废弃了HttpClient,但是还有有必要记录下)原创 2015-11-25 10:46:48 · 10962 阅读 · 0 评论 -
Android-上传图片(二)_HttpClient
上篇博文中记录了使用HttpURLConnection模拟HTTP请求上传文件到服务端 Android-上传图片(-)_HttpURLConnection 本篇博文中将使用Apache HttpClient实现相同的功能。 HttpClient官方quickstart文档详情请移步本人GITHUB原创 2015-11-25 11:30:36 · 10663 阅读 · 0 评论 -
Android模拟多线程下载
本DEMO采用Executor框架来实现多线程的下载。 Executor原理:任务拆分为一些列的小任务,即Runnable,然后在提交给一个Executor执行,Executor.execute(Runnalbe) 。Executor在执行时使用内部的线程池完成操作。原创 2015-11-26 18:38:51 · 11256 阅读 · 0 评论 -
Android Application 之 allowBackup 属性浅析
我们从官网Application文档介绍中可以看到如下信息: android:allowBackup Whether to allow the application to participate in the backup and restore infrastructure. If this attribute is set to false, no backup or restore of原创 2015-12-15 09:41:24 · 11720 阅读 · 0 评论 -
Java多线程:Semaphore
自从5.0开始,jdk在java.util.concurrent包里提供了Semaphore 的官方实现。 Java 5.0里新加了4个协调线程间进程的同步装置,它们分别是: Semaphore, CountDownLatch, CyclicBarrier和Exchanger. Semaphore为并发包中提供用于控制某资源同时可以被几个线程访问的类。Semaphore当前在多线程环境下被扩放使用原创 2015-12-19 21:35:38 · 10806 阅读 · 0 评论 -
使用WakeLock使Android应用程序保持后台唤醒
需求:要在后台跑一个Service执行轮询,屏幕熄灭或锁屏后,仍然需要保持Service一直处于轮询状态。在使用一些产品列如微信、QQ之类的,如果有新消息来时,手机屏幕即使在锁屏状态下也会亮起并提示声音,这时用户就知道有新消息来临了。但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,Android系统中CPU会保持在一个相对较低的功耗状原创 2016-01-25 21:49:12 · 13102 阅读 · 2 评论 -
Service 开机接受广播,启动服务的问题
概述Android 4.0 (其实在3.1的版本中Google已经给出了说明)无法接收开机广播的问题本身是因为,如果应用程序安装上始终没有被打开过,那么在Android启动时,该应用无法接收到开机时的系统广播android.permission.RECEIVE_BOOT_COMPLETED。在4.0中android取消了无主activity运行的线程。所以开机启动的服务必须依赖于activiy。应用原创 2016-02-01 17:31:13 · 15946 阅读 · 0 评论 -
Building Android notifications 2.3 through to 6.0
Sadly ,Notification.setLatestEventInfo() is removed in API Level 23…. The base class Notification was introduced in API level 1, from the very beginning. Back then you would create your notifications原创 2016-02-18 20:29:17 · 11666 阅读 · 0 评论 -
Android接收短信-createFromPdu
This method was deprecated in API level 23. Use createFromPdu(byte[], String) instead.Android收到短信的事件是由系统发一个有序广播的,所以这里需要一个BroadcastReceiver。receiver收到的Intent里面并不是直接存储的短信内容,而是短信的原始数据。所以我们需要自己解码。获取短信的原始数据原创 2016-02-20 16:40:12 · 16055 阅读 · 2 评论 -
ANR的三种类型
ANR一般有三种类型:KeyDispatchTimeout1:KeyDispatchTimeout(5 seconds) –主要类型按键或触摸事件在特定时间内无响应BroadcastTimeout2:BroadcastTimeout(10 seconds)BroadcastReceiver在特定时间内无法处理完成ServiceTimeout3:ServiceTimeout(20 seconds) –原创 2016-02-20 19:03:22 · 15467 阅读 · 0 评论 -
Android’s PreferenceActivity for all API versions
官方文档I have spent the last few days learning about how to use the new Android PreferenceFragment which requires PreferenceActivity to override a new v11 (Honeycomb) method called onBuildHeaders(). Unfo原创 2016-02-21 20:51:42 · 10895 阅读 · 0 评论 -
android:descendantFocusability
开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现了,可能会发生点击每一个item的时候没有反应,无法获取的焦点。原因多半是由于在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件(也可以说是Button或者Ch原创 2016-02-22 12:21:56 · 10960 阅读 · 0 评论 -
获取屏幕的宽和高-Display中getHeight()和getWidth() 官方废弃
getHeight()和getWidth() deprecated in API level 13原创 2016-03-15 15:02:00 · 20675 阅读 · 0 评论 -
Android零碎知识点-更新中
performClick官方定义官方API-View.html#performClick()Added in API level 1public boolean performClick ()使用代码主动去调用控件的点击事件(模拟人手去触摸控件)场景举例之前做过一个使用 LinearLayout+TextView做底部导航的需求,当用户进入后,需要默认选择一个,如下所示 在这里默认选择第一个,我们原创 2016-03-16 20:56:12 · 10987 阅读 · 0 评论 -
An error has occurred while drawing:java.lang.IllegalStateException: The display list is not valid.
错误日志03-31 18:41:36.523 2715-2715/demo.turing.com.materialdesignwidget W/EGL_emulation: eglSurfaceAttrib not implemented03-31 18:41:36.527 2715-2715/demo.turing.com.materialdesignwidget E/HardwareRende原创 2016-03-31 18:54:09 · 13811 阅读 · 0 评论 -
WebView完全解读
概述WebView控件可以在自己的应用程序中显示本地或者Internet上的网页。WebView是一个使用WebKit引擎(4.4之后基于Chromium)的浏览器控件。因此可以将WebView当做一个完整的浏览器使用。WebView不仅支持HTML、CSS等静态元素,还支持JavaScript,而且在JavaScript中还可以调用Java的方法。官方文档Building Web Apps in原创 2016-03-23 20:08:27 · 15361 阅读 · 3 评论 -
.9图片的那点事儿
概述点九图又称九图,是一种png格式的图片,其后缀为.9.png ,其与传统png图片不同的地方是,点九图的四周边缘各有1个像素宽高的区域,而且只能填两种颜色,透明(#00000000)和黑色(#FF000000),其目的是用于对该图片的扩展区域和内容显示区域进行定义。9图说明左边那条黑色线代表图片垂直拉伸的区域, 上边的那条黑色线代表水平拉伸区域, 右边的黑色线代表内容绘制的垂直区域, 下边原创 2016-03-22 20:50:45 · 12636 阅读 · 2 评论 -
底部导航栏的几种实现方式
概述Android底部导航栏实现方式真的是太多了~在这里仅介绍几种实现方式~建议使用TabLayout +ViewPager ,TabLayout是Android Material Design中的控件,布局文件简介。LinearLayout + TextView方式效果图分析根据效果图,我们可以看出在选中的时候,文字 图片 和背景都会发生改变,我们可以通过是否selected来判断。首先来说下原创 2016-03-16 23:58:55 · 34368 阅读 · 0 评论 -
Intent传递数据全解
概述之前的博文也有介绍,查看—->用户界面开发基础这里单独抽取出来,更加详细的记录一下,其实主要是API的使用。Intent传递简单数据可以以直接通过调用Intent的putExtra()方法存入数据,然后在获得Intent后调用getXxxExtra获得 对应类型的数据;传递多个的话,可以使用Bundle对象作为容器,通过调用Bundle的putXxx先将数据 存储到Bundle中,然后调用Int原创 2016-03-14 16:59:44 · 11644 阅读 · 0 评论 -
Menu
菜单的基本使用官方APImenu-resource在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)OptionsMenu效果图说明重写两个方法 public boolean onCreateOptionsMenu(Menu menu):调用OptionMenu,在这里完成菜单初始化,只会在第一次初始化菜单时调原创 2016-03-13 00:37:12 · 11460 阅读 · 0 评论 -
PopupWindow
概述官方APIA popup window that can be used to display an arbitrary view. The popup window is a floating container that appears on top of the current activity.一个弹出窗口控件,可以用来显示任意View,而且会浮动在当前activity的顶部常用构造方法原创 2016-03-12 20:06:24 · 10979 阅读 · 0 评论 -
ContentProvider再探——Document Provider
概述通过ContentProvider初探相信你已经知道如何去使用系统提供的ContentProvider或者自定义ContentProvider了, 已经基本满足日常开发的需求了,有趣的是,我在官方文档上看到了另外这几个Provider:Calendar Provider:日历提供者,就是针对针对日历相关事件的一个资源库,通过他提供的API,我们 可以对日历,时间,会议,提醒等内容做一些增删改查原创 2016-03-12 01:00:23 · 12280 阅读 · 0 评论 -
ContentProvider初探
引言我们什么时候 会用到ContentProvider呢?1.我们想在自己的应用中访问别的应用,或者说一些ContentProvider暴露给我们的一些数据, 比如手机联系人,短信等!我们想对这些数据进行读取或者修改,这就需要用到ContentProvider了!2.我们自己的应用,想把自己的一些数据暴露出来,给其他的应用进行读取或操作,我们也可以用 到ContentProvider,另外我们可原创 2016-03-11 00:50:42 · 10779 阅读 · 0 评论 -
数据存储之-SQLite数据库二
1.SQLite事务简单点说就是:写在事务里的所有数据库操作都成功,事务提交,否则,事务回滚,就是回到前面 的状态——未执行数据库操作的时候!另外,前面我们也将了,在data/data/<包名>/database/目录 下除了有我们创建的db文件外,还有一个xxx.db-journal这个文件就是用来让数据库支持事务而 产生的 临时的日志文件!2.SQLite存储大二进制文件当然,一般我们很少往数据原创 2016-03-11 00:01:29 · 10654 阅读 · 0 评论 -
数据存储之-SQLite数据库一
概述SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用, 不仅支持标准SQL语法,还遵循ACID(数据库事务)原则,无需账号,使用起来非常方便!SQLite支持五种数据类型:NULL,INTEGER,REAL(浮点数),TEXT(字符串文本)和BLOB(二进制对象) 。虽然只有五种,但是对于varchar,char等其他数据类型都是可以保存的;因为SQLit原创 2016-03-10 23:59:25 · 12029 阅读 · 0 评论 -
数据存储之文件存储
概述文件存取的核心就是输入流和输出流。Android文件的操作模式文件的相关操作方法文件读写的实现openFileOutput和openFileInput方法 /** * openFIleOutput ,openFileInput * 这两种方法同sp一样只能讲文件保存到手机内存固定的路径中, * 默认为 /data/data/<packageName>/files原创 2016-03-08 22:28:09 · 12376 阅读 · 0 评论 -
全局事件-广播(Broadcast)
什么是广播接收系统广播短信拦截用代码注册广播接收器广播的优先级来去电拦截截获屏幕休眠与唤醒开机自动运行显示手机电池的当前电量发送广播验证广播接收器是否注册小结原创 2016-03-05 23:39:13 · 12464 阅读 · 0 评论 -
数据存储之SharedPreferences
在Android系统中提供了多张存储技术,这些存储技术可以讲数据保存在各种存储介质上。例如SharedPreferences可以将数据保存在应用软件的私有存储区,这些存储区中的数据只能被写入这些数据的软件读取。除此之外,Android系统还支持文件存储、SQLite数据库、OBB文件、云存储等SharedPreferences的基本用法SharedPreferences处理的就是一个key-valu原创 2016-03-07 22:57:48 · 10984 阅读 · 0 评论 -
信息提醒之Notification,兼容全部SDK-更新中
概述Notification与对话框、Toast无论从外观上还是从使用方法上有本质的区别。 Notification是Android中很理想的提示方法,Notification可以在Android桌面上最上方的状态栏显示提示信息,还可以显示图像,甚至可以将控件加载到上面,而且只要用户不清空,这些信息可以永久的保留在状态栏,除了这些还有其他更吸引人的特性,让我们一起发掘下吧。本篇博文中使用的创建No原创 2016-02-25 09:38:41 · 13207 阅读 · 0 评论 -
信息提醒之对话框(AlertDialog + ProgressDialog)-更新中
概念Android中的对话框需要使用AlertDialog类来显示,主要用于显示提醒信息,不过这个对话框类可不仅仅能用来显示一些信息,我们可以在对话框中防止任何的控件,使其成为一个复杂且功能强大的用户接口。一个典型的例子就是使用AlertDialog做一个登录对话框。对话框的基本用法通过查看AlertDialog类,我们可以发现,该类并没有public的构造方法,因此我们不能直接创建AlertDia原创 2016-02-25 09:24:43 · 14083 阅读 · 0 评论 -
信息提醒之Toast-更新中
概述Toast与对话框类似,也会在屏幕的某个位置弹出一个窗口,在窗口中可以显示文本、图片等信息与对话框不同的是,Toast信息提示框不可获得焦点,而且在显示一定的时间后会自动关闭。 因此,再显示Toast信息提示框的同时,屏幕上的控件仍然可以继续操作。Toast的基本用法显示Toast需要使用android.widget.Toast类。只显示文本的Toast如果只是显示文本的话,可以用如下代码Toa原创 2016-02-24 00:01:11 · 11138 阅读 · 0 评论 -
Service基础
概述Service是Android四大组件之一,主要两个目的: 后台运行和跨进程访问。通过启动一个Service,可以在不显示界面的前提下在后台运行指定的任务,这样可以不影响用户做其他事情。通过跨进程服务(AIDL)可以实现不同进程之间的通信,这也是服务的重要的用途之一。Service并没有实际界面,而是一直在Android系统的后台运行。 一般使用Service为应用程序提供一些服务,或者不需要界原创 2016-02-17 09:19:16 · 11626 阅读 · 0 评论 -
跨进程访问(AIDL服务)
我们都知道Service的主要的作用是后台运行和跨进程访问。 关于Service后台运行请查看鄙人的另外一篇文章Service基础本篇博文主要探讨的是跨进程访问~什么是AIDLAndroid系统中的进程之间是不能共享内存,因此,需要提供一些机制在不同的进程之间进行数据通信,Activity BroadCast 和 Content Provider都可以跨进程通信,Service同样也可以跨进程通信原创 2016-02-16 20:57:28 · 12971 阅读 · 0 评论 -
按钮和复选框控件
概述本篇文章介绍Android SDK中的按钮和复选框控件。按钮可以分为多种,例如普通按钮(Button)、图像按钮(ImageButton)、选项按钮(RadioButton)、复选框(CheckBox)等Button官方介绍Class OverviewRepresents a push-button widget. Push-buttons can be pressed, or clicked,原创 2016-01-26 17:05:00 · 13130 阅读 · 0 评论 -
EidtText
像QQ一样输入表情图片在EditText中输入特定的字符AutoCompleteTextView原创 2016-01-18 23:28:24 · 10460 阅读 · 0 评论 -
TextView
文本控件显示富文本(URL、不同大小、字体、颜色的文本)在TextView中预定义了一些类似HTML标签(不区分大小写),通过这些标签,我们可以使TextView控件显示不同的颜色、大小、字体的文字。 常见的标签如下: 名称 描述 <font> 设置颜色和字体 ,只支持color和face两个属性 <big> 大号字体 <small> 小号字体 <i> 斜体原创 2016-01-12 16:18:59 · 11562 阅读 · 0 评论 -
Android常见XML属性解析
常见XML属性解析 属性 描述 android:id android:id的设置,通常有三种方式,详见下文 android:layout_width 控件宽度 android:layout_height 控件高度 android:padding 内边距 android:margin 外边距 android:layout_weight 权重 a原创 2016-01-12 11:32:33 · 11569 阅读 · 0 评论 -
用户界面开发基础
Activity是Adnroid中唯一可视化的应用程序组件。代码托管 GithubActivity的使用方法Activity是Android中最核心的应用程序组件,也是大多数程序必须使用的用于显示界面的组件。创建Activity建立一个普通的Java类,该类必须从Activity类或者其子类中继承。重写Activity类中的onCreate方法。在onCreate方法中使用setContent原创 2016-01-06 21:05:56 · 11713 阅读 · 0 评论