Android

A collection of 50 posts
Android

Android Activity 启动方式

在mainfest文件中,activity标签有一个属性launchMode,它确定了当前Activity在Task栈中的运行模式,共分为四种模式: * standard 如果在Activity标签中没有指明运行模式的话,系统会默认采用此种方式运行。 系统按照Intent的定义创建新的Activity实例并置入Task栈中。这个Activity可以被实例化多次,每一个实例可以放入不同的Task栈,同一个Task栈也可以包含多个Activity实例。 * singleTop 如果在当前Task栈的栈顶已经包含了这个Activity的实例,系统会将Intent信息通过onNewIntent()方法传入当前已经实例化的Activity中,而不是创建一个新的Activity实例。这个Activity可以被实例化多次,每一个实例也可以放入不同的Task栈,同一个Task栈也可以包含多个实例 (这必须满足一个条件,在Task栈的栈顶不存在一个Activity实例)。 举个例子,假设一个Task栈中包含根Activity A、Activity B、C以及位于栈顶的Activity D
3 min read
Android

Android Tasks and Back Stack

每一个Android应用都由多个activities组成,每一个Activity可以执行特定的action也可以打开其他的activity。举例说明,一个Email应用会有一个Activity来显示未读邮件列表,当用户点击其中一封邮件时,一个用来显示这封邮件内容的Activity就会被创建出来。 Activity甚至可以启动本机上其他应用的Activity。比如说,当你的应用要发送邮件时,你可以定义一个包含邮件地址征文等信息和发送消息action的Intent。与此同时另外一个应用的Activity被声明为可以执行这个Intent然后打开它。在这个过程中,Intent被定义为发送邮件,所以一个Email应用会启动并创建“写邮件”Activity,(当然,如果系统中包含多个可以支持此Intent的Activity,系统会弹出一个列表来供你选择)。当Email被发送出去后,启动这个Intent目标的Activity会被恢复,这就好像是发送Email的Activity是应用自身的一部分一样。通过将两个来自于不同的应用Activity放入同一个Task,Android完美实现了用户操作的无缝
5 min read
Android

Android 蓝牙模式定义 Activity运行方式

位置:platform/packages/apps/Bluetooth 位置:platform/packages/apps/Calendar 1、Bluetooth Profile 不同类型的蓝牙设备的通信依赖于各自Profile的定义。 Profile是在蓝牙通讯连接管理层之上为不同类型设备之间通讯而定义的一套描述规范。在Bluetooth 4.0之前主要有A2DP(Advanced Audio Distribution Profile)、HDP(Health Device Profile)、HFP(Hand-Free Profile)、HID(Human Interface Device Pro)、OPP(Object Push Profile)、PAN(Person Area Networking)、PBAP(Phone Book Access Profile),android原生系统的Bluetooth管理器均实现了上述Profile,在Bluetooth 4.
1 min read
Android

Android TypeArray AttributeSet使用

位置:platform/packages/apps/Calculator 1、TypeArray、AttributeSet 在XML布局中定义的每个组件定义以及属性值会在布局加载时读取出来通过Xml.asAttributeSet()转换为AttributeSet传递给UI组件的构造方法。 通过全局Resources来读取XML数据资源定义,根据传入资源ID来获取部分资源描述赋值给TypeArray。TypeArray类型的变量使用完毕后必须手动调用recycle()方法释放资源。
Android

Android Toast叠加问题 XLIFF标签 广播注册接收 Content Provider

位置:platform/packages/apps/AlarmClock 1、同一应用中Toast调用多次,Toast消息叠加: 定义静态Toast对象,在新的Toast生成时关闭之前所有的Toast视图资源(包括正在显示的以及已加载但还在队列中没有显示的)。 public class ToastMaster { ​ private static Toast sToast = null; ​ private ToastMaster() { ​ } ​ public static void setToast(Toast toast) { if (sToast != null) sToast.cancel(); sToast = toast; } ​ public static void cancelToast() { if (sToast != null) sToast.cancel(); sToast = null; ​ } ​ } 2、广播消息的接收注册 //广播消息过滤 IntentFilter filter
2 min read
Windows

Windows 8.1下ADB无法正常运行

这周刚刚把Windows 8升级到8.1,先是出现IE11下Google搜索页面布局乱了的情况,今天又遇到Android 的ADB驱动无法正常启动的异常情况,按照之前为Nexus4添加驱动的方式添加,错误显示为“设备无法启动(错误代码10)”。 从XDA论坛上有很多人爆出这个错误。具体应该原因有待了解,之前是因为Google的USB驱动没有获得徽标认证,Windows8默认情况下不允许安装这种驱动,所以必须关闭了驱动签名或者从inf中提取信息强制安装,详见 这篇文章 [https://www.nitrohsu.com/windows-8-an-zhuang-nexus-4-usb-qu-dong.html]。 Windows8.1下再通过这种方式就不行了,无奈只能通过第三方的ADB驱动来安装。 下载链接 [http://download.clockworkmod.com/test/UniversalAdbDriverSetup.msi]关于驱动 [http://forum.xda-developers.com/showthread.php?t=1161769] 源代码 [http
1 min read
Android

Android View GONE的设置问题

在XML布局中如果将某个view设置为android:visible="gone",在代码中再在此view上加载数据是不会成功的,即便是再将其设置为.set Visibility(view. VISIBLE)也不会再显示加载的内容。原因是根布局通过加载编码后的XML开始在canvas上绘制时它会忽略掉设置为GONE的子布局,只留有元素信息但不实际绘制,所以当在代码即便是设置为VISIBLE,它也不会在屏幕上显示。 解决办法是,在XML中依然保持visible,在onCreate方法中通过代码把view的visiblity设置为View.GONE 即可。
1 min read
Android

HttpClient 4.3中Https的使用方法

开发Android版Do+新浪微博客户端 [https://play.google.com/store/apps/details?id=com.n2hsu.doplus.weibo] 时使用到了HTTPClient库,当时刚刚接触API接口开发很多都不懂,直接调用HTTPS时直接报证书错误,后来查找资料发现,HTTPClient在请求HTTPS时也需要证书认证。通过自定义HTTPClient顺利实现了接口调用。最近在做另外一个项目,也会通过HTTPClient来调用第三方的API,所以又查看了一下HTTPClient的源码,把HTTPS的请求方式重新梳理一下。 注意:Android项目中内嵌的HTTPClient库版本为4.2.3,详见此处。下面介绍中使用的库为4.3,两者之间有些差异。4.3当前为开发版,谨慎使用。 以新浪微博API为例, 1、通过浏览器下载https://api.weibo.com的证书 Chrome浏览器,地址栏中键入“https://api.weibo.com/oauth2/authorize ”,点击左侧绿色锁状图标,
3 min read
Windows

Windows 8安装Nexus4 USB驱动

Google Nexus4 USB Driver下载 [https://dl-ssl.google.com//android/repository/latest_usb_driver_windows.zip] 由于Window8强制启用驱动签名认证,导致Nexus 4的USB驱动无法安装,即便是通过查找本地计算机的驱动文件,Windows8也无法识别当前驱动文件。 为此我们需要现将ADB设备类型添加入Windows设备列表中,在浏览计算机上的驱动文件那一步选择,从计算机的驱动程序列表中选取。 Next,选择“显示所有设备” Next,选择“从磁盘安装” Next,在对话框中选择“浏览”,找到刚刚下载的Nexus USB Drvier文件夹中的“android_winusb.inf”,点击“确定” 此时Windows会根据inf配置信息列出可安装的驱动列表 选择“Android ADB Interface”,Next,弹出警告对话框,选择“是”,这样Nexus
2 min read
Android

Android Preference Key关键字问题

今天在Preference.xml中添加Preference时将其中一个key设置为visible_pic,结果在调试时一直报错,错误如下: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.n2hsu.doplus.weibo/com.n2hsu.doplus.weibo.activity.Setting}: java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.
2 min read
Android

三星4月11号在美国发售Galaxy Note 8.0平板,售价399.99美元

三星今天毫无疑问地发布了至今最大尺寸的Android智能手机Galaxy Mega。 这款手机会有两个版本:一款6.3寸,另外一款屏幕稍小5.8寸。前者与5.5寸Galaxy Note II的类似。Note II是仅次于Galaxy S III的畅销手机。 6.3寸的Galaxy Mega搭配了一颗1.7GHz 的双核处理器(没有说明哪家制造商)1.5GB的RAM,运行Android 4.2(Jelly Bean), 惯例当然是搭载TouchWiz界面。 这两款手机都搭载了主流的800万像素的后置摄像头和一颗190万像素的前置摄像头用于视频通话。 6.3寸的Galaxy Mega有8GB和16GB两个版本,可以通过microSD卡扩展到64GB,便于存储音乐、视频等资料,支持LTE,同时包含像Samsung Link、S Travel、S Translator等丰富的Apps。 5.8寸的Galaxy Mega相比6.3寸的来说要稍低一些,而且没有太多提及。双核处理器被锁定到1.4GHz,
2 min read
Android

三星发布两款Galaxy Mega怪兽级Android智能手机

三星宣布将会在4月11号在美发售Galaxy Note 8.0 平板。 这款在MWC上首次出现的平板将会在brick-and-mortar 商店有售,在线发售的商城有online retailers such as Amazon, Best Buy/Best Buy Mobile, h.h. gregg, Newegg, P.C. Richard & Son, Staples and TigerDirect.com. Galaxy Note 8.0 平板运行Android 4.1.2 (Jelly Bean),拥有一块8寸WXGA TFT屏幕。它的发售主要是针对极度流行的iPad mini和屏幕更小的Nexus 7。搭载了一颗1.6GHz四核处理器,2GB RAM和一块4600毫安的电池,500万后置摄像头,130万前置摄像头。
1 min read
Android

Facebook的移动探索 HTML5->Native App->Home

Facebook(简称“FB”)在被忽视的移动互联网中做了很多的探索,但是一直不得其解。在上周四,FB CEO 扎克伯格在发布会上发布了Android启动器软件“Home” ,宣示FB将成为一家“mobile first, mobile best”的伟大公司。但想想之前的那些努力,扎克伯格能否如宣称的那样真得登上移动互联网的巅峰呢? 当前大约有10亿用户通过桌面、手机、平板等众多平台登录FB,这促使FB不得不做出很多尝试。从HTML5到支持iOS、Android、Windows Phone、黑莓的本地App,再到Facebook手机、“Home”,FB如何才能在移动领域站稳脚跟? 冒险与停止不前的HTML5 App 扎克伯格带领着FB通过移动互联网去往何方?他们宣称不管用户正在使用的是iPhone、Android、黑莓还是Windows Phone,社交网络无缝可达。但是他们的畅想最终落空了。去年10月份,扎克伯格说用户更多的选择通过iPhone、Android登录FB的移动网站。 “…虽然iPhone 是一个强大的平台,还是会有很多人使用Android手机,因为它可以给用户更多
4 min read
Android

Gmail for Android 4.3发布

Google 本周一发布了Gmail for Android 4.3,此次更新主要优化了Email的操作速度。你可以通过Google Play Store [https://play.google.com/store/apps/details?id=com.google.android.gm] 直接下载。 首先提到的是,针对Jelly Bean用户,Google增加了许多直接可以在通知栏点击的操作,Android 4.1或者4.2的用户现在可以直接在通知栏回复、归档、删除邮件,一键直达,如图所示: 如果你没有Android 最新版本也没事,Gmail在ICS(Android 4.0)上同样带来了搜索上的更新。无论你正在离线还是在线查看邮件都变得更加流畅。针对这些版本虽然不会再有更多的更新或者改变,但Google官方在未来还会增加的“优化的搜索提示”等特性。 最后但不是最重要的是,如果你还在使用运行Froyo或者Gingerbread 的Android版本(
2 min read
Android

Android 图片缓存设计

Android ImageView绘制时由于网络的不稳定会造成图片加载失败或者加载很慢的情况,同时很多图片的重复下载也会造成数据流量的浪费,设计图片缓存可以很好的解决这些问题。 图片缓存主要有二级缓存,Memory Cache Pool为一级、File Cache为二级。 1、Memory Cache Pool 通过简单使用一个Hashmap来管理全局的内存图片缓存池,当然这个Hashmap要限定一定大小不能无限制增加,同时还要考虑缓存池的替换规则,简单的话就是随机剔除某一个或最后一个,精细化操纵可以加入先进先出或者最短时间使用等算法来维护缓存池,当然这也增加了缓存池设计的复杂度。 2、File Cache 在ImageView绘制图片时,首先检查Memory Cache是否存在此图片,如果有的话直接取出,如果不存在调用AsyncTask或者Thread来加载图片。在这其中首先要先检查本地缓存文件,如果存在直接调用BitmapFactory.decodeFile()读取;如果不存在,发起http请求下载图片,并按照规则定义放入文件缓存,同时加入内存。 示例代码: 异步请求
2 min read
Android

Android 三屏左右滑动切换的实现

实现原理: 将三个界面放置于FrameLayout中,默认显示当前主页面,左(右)滑动,显示左(右)辅页面,隐藏右(左)辅页面,根据滑动距离 重绘主页面在屏幕的位置。当用户滑动停止抬起手指时,判断总计滑动距离,若大于屏幕宽度1/2,直接定位到主页面偏移结果位置处。 package com.n2hsu.n2flipper; ​ import android.os.Bundle; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import
2 min read
Android

LG收购webOS用于新一代智能电视

LG今天宣布从HP收购webOS的全部资产,这将会为webOS翻开崭新的一页。 CNET最先报道了此消息。2011年8月HP放弃开发webOS软件和设备。虽然支持它的手机、平板电脑极其少,HP还是发布了开源平台希望开发者能够挽救这一广受称赞的软件。 LG宣布收购webOS的源码、文档以及webOS官方站点,还获得了HP 2010年收购Palm时的专利授权许可。 LG 将在新一代智能电视中使用webOS,这能够增强与三星以及其他竞争对手的优势。LG在2007年发布了它第一款智能电视,它包含有App应用、手势、桥接连接多屏等技术。 比较悲剧的是,LG没有计划把一个webOS打造成智能手机操作系统平台。 LG电子的CFO Skott Ahn说: ”LG会打造更加直观的用户体验、同时为消费电子产品提供更广泛的互联网服务。” LG将会把webOS团队搬到位与桑尼维尔和旧金山的新实验室-Silicon Valley实验室,在那里与LG的美国团队一块协作办公。 原文链接: http://thenextweb.com/asia/2013/02/25/lg-acquires-webos-s
1 min read
Android

Galaxy Nexus 开启 开发者选项

刚刚刷完Google原版4.2.4的ROM,忽然发现没有开发者选项,网上查了一下才发现原来暗藏玄机。 设置->关于手机->版本号,连续点击"版本号(JDQ39)"三次,出现提示“你再点 4 下就会变成开发者”,然后再次点击4次,就会出现已经开启开发者模式的提示。此时再后退到设置,就能看到久违的开发者选项了。 这也是Android 彩蛋一枚! By Nitro Hsu
Android

15款最美Android应用

据国外媒体报道,Android从发行至今已经走过了5年多的风风雨雨,而这款以一个绿色机器人作为标志的手机操作系统已经获得了极大的成功。尽管Android已然跃居世界市场占有率之首,不过批评之声却也比比皆是。相比苹果的iOS系统,人们认为Android并不够优雅,许多应用开发者也因此并不看好Android。 不过,Android应用设计的发展仍是非常迅猛的。2011年11月谷歌发布了Android 4.0系统冰激凌三明治(Ice Cream Sandwich),新系统的一个巨大革新就是它拥有一款华丽时尚的界面Holo。截止到今天,Android已经陆续推出了Android 4.1 Jelly Bean(果冻豆)和Android 4.2 Jelly Bean(果冻豆),这些新版本的一个重要的新特性就是UI的美化和提升。 Holo之美在于它能够很灵活的适用于众多Android设备的屏幕尺寸,而不失尊贵典雅的气质。越来越来多的程序开发者也注意到了这一点,并把Holo风格的界面应用到了程序当中。 Android系统的关键特征是它支持多种不同的屏幕,不同的分辨率,以及不同的屏幕方向。每一个A
8 min read
Android

新浪微博上传图片---Android代码示例

在做新浪微博客户端上传图片时,API的解释一直很不给力,由于上传图片必须模拟HttpClient的行为模式,导致移动客户端的上传图片模块开发比较棘手。无奈只能旁征博引,参考其他资料,以下代码在Android平台下测试已经通过。 参考资料:人人网API [http://wiki.dev.renren.com/wiki/Photos.upload]、腾讯微博API [http://wiki.open.t.qq.com/index.php/API%E6%96%87%E6%A1%A3/%E5%BE%AE%E5%8D%9A%E7%9B%B8%E5%85%B3/%E5%8F%91%E8%A1%
2 min read