Android来电号码获取的方法很简单,虽然Dalvik上的程序都是Java写的,但是仍然可以处理系统事物,使用PhoneStateListener;类可以监测话机状态,而TelephonyManager可以获取电话服务的实例,写代码时不要忘了在androidmanifest.xml中加入权限。 需要引入两个Packageimport android.telephony.PhoneStateListener;import android.telephony.TelephonyManager; MyPhoneStateListener phoneListener=new MyPhoneStateListener(); //我们派生的类 TelephonyManager telephonyManager =(TelephonyManager)getSystemService(TELEPHONY_SERVICE); telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 这里做下简单的调试,直接使用Logcat查看来电号码: import android.content.Context;import android.telephony.PhoneStateListener;import android.util.Log; public class MyPhoneStateListener extends PhoneStateListener { Context context; @Override public void onCallStateChanged(int state,String incomingNumber){ Log.e("PhoneCallState", "Incoming number "+incomingNumber); //incomingNumber就是来电号码 } 整个来电软件制作十分简单,Android平台在各方面都比较智能,加上一个BOOT_COMPLETED获取,保证开机自动运行,一个来电通就很容易的制作完成了,稍后Android开发网会提供完整工程的源代码下载。
April 2013
Android天气预报程序开发实例与定位信息 Android开发技术
昨天我们大概描述了下Android中的XML解析,其实整个实现方式比较简单,可以参考anddev.org的例子和com.commonsware.android.internet例子,Google Weather API还包含了另一种方式根据经度、纬度方式获取天气信息。在T-Mobile G1中可以通过基于移动网络和GPS方式定位,粗略获取当前定位坐标可以下面代码获取。 LocationManager myLocationManager=null; myLocationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE); Location l = myLocationManager.getLastKnownLocation("network"); //这里使用myLocation方式获取。 String url = l.getLatitude() + "," + l.getLongitude(); //这里获取到了精度和维度,即使不用GPS我们基本上可以获取粗略的城市位置。这里获取的l.getLatitude()返回的是浮点型,我们需要处理下,比如获取的为31.174165,需要过滤掉“.”保留31174165即可,维度同理:我们提交下面的 http://www.google.com/ig/api?weather=,,,31174165,121433841 数据即可获取,这里我们使用了Google Weather API的精度维度方式获取,根据城市拼音名可以参考昨天的Android与XML解析一文,获取的内容如下: <?xml version="1.0" ?> – <xml_api_reply version="1"> – <weather module_id="0" tab_id="0"> – <forecast_information> <city data="" /> <postal_code data="" /> <latitude_e6 data="31174165" /> <longitude_e6 data="121433841" […]
写给初学者,Android AIDL必看内容 Android开发技术
更好的设计Android软件应该熟悉掌握AIDL IPC机制,可以让你编写的组件类似Windows ActiveX COM一样更好的复用,提供类似像Symbian那样的服务器机制。服务可以很好的解决在后台运行无UI的窗口。我们创建一个aidl文件名为android123.aidl下面是示例代码,修改于Android SDK文档。 一、创建AIDL文件 package cn.com.android123; 引入声明 import cn.com.android123.IAtmService; // 声明一个接口,这里演示的是银行ATM程序interface IBankAccountService { int getAccountBalance(); //返回整数,无参数 void setOwnerNames(in List<String> names); //不返回,包含一个传入List参数 BankAccount createAccount(in String name, int startingDeposit, in IAtmService atmService); //返回一个自定义类型 int getCustomerList(in String branch, out String[] customerList); //返回整形,输入一个分支,输出一个客户列表} 二、实现一个接口 显示的提供一个导出接口,为客户端提供绑定。 public class RemoteService extends Service { @Override public IBinder onBind(Intent intent) { […]
如何实现Android程序国际化 Android开发技术
如何让你的Android程序自适应国际化,比如说多国语言等问题呢? 这点Google在设计Android框架时就考虑到该问题,平时在设计资源相关的采用了MVC模式,代码逻辑和UI界面分离更容易维护管理,这里平时在写代码时尽量使用资源文件,不要使用硬编码。下面的文件夹目录为: Android123/res/values-en为英语、Android123/res/values-fr为法语,以Eclipse的Package Explorer树形显示为: Android123/ 程序根目录 res/ 资源文件夹 values-en/ 英文 strings.xml values-fr/ 法文 strings.xml 如果需要添加其他国家语言以此类推,这里我们看到了en、fr这样所写。Android开发网提醒网友可以参考ISO 639-1 ,这里中文分简体和繁体两种版本。
Android与XML解析 Android开发技术
XML是一种常用的存储数据方式,在Android平台中内部很多地方使用了XML存储,比如轻量级的SharedPreferences类的存储其实保存在Data/data/[package name]/db。如果你使用的不是Android Dev Phone或没有Root权限,可以通过Android模拟器来查看。 XML解析主要有三种方式,SAX、DOM、PULL。常规在PC上开发我们使用Dom相对轻松些,但一些性能敏感的数据库或手机上还是主要采用SAX方式,SAX读取是单向的,优点:不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便。而DOM方式会把整个XML文件加载到内存中去,这里Android开发网提醒大家该方法在查找方面可以和XPath很好的结合如果数据量不是很大推荐使用,而PULL常常用在J2ME对于节点处理比较好,类似SAX方式,同样很节省内存,在J2ME中我们经常使用的KXML库来解析。 XML解析实例:-天气预报程序的开发: Google为我们提供了很多利用天气预报的程序开发,比如MyLocation API和Google Weather API,这里我们就以中国上海来举例,查询上海天气我们执行http://www.google.com/ig/api?weather=Shanghai,China 可以看到,最后的weather=后面就是城市的拼音名称。 完整的XML文件结构为: <?xml version="1.0" ?> – <xml_api_reply version="1"> – <weather module_id="0" tab_id="0"> – <forecast_information> <city data="Shanghai,China" /> <postal_code data="Shanghai,China" /> <latitude_e6 data="" /> <longitude_e6 data="" /> <forecast_date data="2008-12-17" /> <current_date_time data="2008-12-17 16:00:00 +0000" /> […]

Android中文短信开发终结篇 Android开发技术
本次Android开发网将直接公开所有中文短信终结篇方法,整个分析过程很简单。 1.分析开源的platform/frameworks/base.git该文件可以查看详细的Telephony.gsm底层构架,可以查看telephony/java/com/android/internal/telephony/gsm这个文件,当然Google未来解决多国问题已经在Cupcake更新逐渐的改进了,比如台湾繁体中文的实现。我们直接打开ISms.aidl文件可以看到 2.使用Android 0.9 SDK的android.jar文件编译包含internal库。最新的Android SDK 1.0r1和r2反而越来越不开放了对于开发人员,网友可以在Android SDK 0.9 beta测试版发布和下载 中找到下载链接。 3.因为作为一个aidl的接口,这里我们直接使用方法来发送就可以了,这里的sendRawPdu第一个参数为短信服务中心,使用默认的null即可,第二个为我们自己构造的ucs2编码的pdu字节数组就可以解决unicode问题,不要忘了调用远程服务需要捕获RemoteException异常。简写的Java代码如下: try{ ISms.Stub.asInterface(ServiceManager.getService("isms")).sendRawPdu(null,unicodes,null,null); } catch(RemoteException e) { e.printStackTrace(); } 4.加入必要的短信发送权限,可以查看Android权限列表permission说明一文。 最终完整的工程源代码www.android123.com.cn稍后提供下载(包含中文输入法).
Android中文短息相关问题解答 Android开发技术
最近很多网友来信反馈有关Android中文短信的实现原理,其实了解中文短信应该从最基本的GSM通讯协议开始看起,这里找到了Android平台的短信类库android.telephony.gsm的相关实现看完就可以很好解决。然而平时分送时使用sendMultipartTextMessage方法比较好,该方式可以自动计算文本长度,然后使用divideMessage()方法分段,最终均使用sendTextMessage来发送,但底层的实现都需要经过sendRawPdu方法。 其中实现中文短信的核心就是编码,常规的SMS使用的是7bit的压缩处理方式,然后MMS或Push短信使用的8bit非压缩方式,但发送中文、日文都需要使用16bit的unicodes编码方式,这里需要说明的是这类宽字节的编码仅能存储70个字节,而gsm标准的的7位是压缩的可以存放160个字节内容。标准的8位是256个字符,对应ascii正好够用,最终中文短信使用java内部的utf-16be编码方式,通过getBytes方式直接转换即可,其实Android在实现短信内部上已经实现了正确的ucs2编码,但在调用时使用了一个try和catch先尝试7bit的gsm编码,但发送常规中文短信时并没有失败,造成catch中的ucs2编码方式尚未执行。 如果仍然有疑问可以仍然来函到 android123@163.com
Android平台视频解码器问题 Android开发技术
如果你购买了Android Dev Phone 1或T-Mobile G1一定不会错过它强大的视频播放功能,Google在设计Android平台时考虑到自家的Youtube问题所以在视频解码器方面并没有做过多开发,直接使用OHA联盟中的OpenCore库来做解码器,但播放时我们发现了仅仅兼容WMV、3GP和H264编码或者说AVC编码的MP4文件。这里在播放视频时只有修改底层的C类库才能改进,从最终发布的版本来看平时的播放方法都不是很奏效,但是使用 视频转换王 可以很好的解决这个问题,视频转换王VCK可以将各种视频格式转换成G1支持的视频格式,这点希望对大家建立流媒体服务器时压片有很大的帮助,这款软件是免费绿色的。
Android输入法开发实例解析 Android开发技术
这里我们建立表1为BiHua,同时构建两个字段,字段1为“input”来存放输入的,字段2为“value”为匹配出来的值,这里不难实现比如我们输入“111211”就可以匹配出两个这样笔画的字,分别是“彗”和“慧”,而1笔就可以输入好的字有“一不在有来大地到要可而于下过事”,这里我们可以把常用字优先排到前面。 2.五笔输入法 这里我们建立表名为CN,这里常规的字、词组、五笔都可以使用同一张表,这样对应查找更方便些,平时使用王码的打字员输入“ep”可以匹配出“爱”字,输入“jqb”匹配出“昂”字。这里ep就是input字段,而昂就是value字段在表CN中,依次类推。 3.英文输入法 这个就更简单了,把常用的单词表全部放入到数据库中,输入a自动匹配apple、arm这样的单词,类似autocomplete是把,其实就是包含关系的,这里找个词典直接导入即可。 4.联想输入法 平时一个字一个字的输入老慢,同样我们不用很负责的算法,直接加入类似“zhongguo”对应“中国”这样的词组就OK了,经过Android123的初步测试SQLite数据库在Android上还是蛮快的,但是还是不推荐这样制作输入法,至少商用产品不能这样开发的。 5. 9宫格输入法 平时不用G1附带的QWERTY键盘打字时可以尝试下新的9宫格输入法,比如在传统手机键盘上,我们可以发现1键对应的是符号,2键上刻有 a b c这三个字母,而9键上刻有 w x y z 这个四个字母,正常不用遍历算法一样可以直接记录下按键顺序,比如输入“ding”这个拼音就是3464,而输入“chen”就是2436,最后再使用方法4中的直接查翻译过来就是中文字了,呵呵是不是很简单呢? 三、选字设计 这里我们充分发挥Android平台的触摸优势,通过Gallery控件可以直接实现触摸滚动,每个字我们可以当作一个TextView对待,因为都是派生于View类我们直接使用listener来拦截按下事件,就达到了触摸选字,如果是QWERTY布局的话按键排列比较紧密,可以使用Android平台提供的View类的长按listener来获取长按事件,显示一个放大的按下按钮信息,这点可以参考iPhone手机的输入法。 四、如果你仍然对Android输入法或中文发短信有疑问,由于时间问题,发送到android123@163.com邮箱回复可能不会很及时,大家可以在Android开发网的论坛,Android论坛进行讨论。

开发Android学习Eclipse调试技巧 Android开发技术
在Android程序开发中除了需要注意Logcat查看调试信息外,对于部分复杂而又庞大的工程可能错误十分不明显,这样就需要通过设置断点(breakpoint)的方式进行跟踪调试,Android使用Java语言开发所以今天就说下Google ADT插件制定的Eclipse IDE做为示例,如果过去习惯了NetBean相信你都理解。在创建好工程后,在Eclipse菜单中的Run下面可以找到 Toggle Breakpoint(断点打开或关闭),Toggle Line Breakpoint(行断点开关)Toggle Method Breakpoint(方法函数的断点)、Toggle Watchpoint(观察窗的断点)Skip All Breakpoints(跳过所有断点)、Remove All Breakpoints(移除所有断点)等内容来设置。这里我们就以Android123这个工程来测试,在某行代码下执行下Toggle Breakpoint这个命令就可以看到航标左边有个点,这里就是我们的断点,程序运行到这里会自动停下来,Java作为一种解释型语言主要是和运行时库或者说Dalvik虚拟机中进出,下一次我们讲下DDMS中如何去观察断点,刚才的操作如图所示:

Android开发之Eclipse调试技巧 Android开发技术
使用Google提供的ADT插件可以在Eclipse上很轻松的调试Android程序,我们切换到DDMS标签,选择“Devices”标签,我们可以看到会出现类似下面的Debug Process(调试进程)、Update Threads(更新线程)、Update Heap(更新堆)、Cause GC(引起垃圾回收)、Stop Process(停止进程)、Screen Capture(屏幕截图)、Reset adb(重启Android Debug Bridge) 这里我们就可以很好的观察Android程序运行时的各种状态,比如进程信息、线程分析、堆内存的占用,结束一个进程,当然这些操作都是在DDMS框架下进行的,日程开发的程序是无法执行调用的。如果遇到adb调试桥运行不稳定时可以选择reset adb来重新启动adb.exe进程,整个界面如图:
Android示例程序Snake贪食蛇代码分析 Android开发技术
通过Android SDK中的Sample文件夹中的Snake示例这个简单的贪食蛇游戏让我们好好了解一下Android平台窗口View显示类开发中的相关问题。 1. 我们直接在Eclipse中导入这个工程,可以看到在Snake.java的入口onCreate方法中第一句requestWindowFeature(Window.FEATURE_NO_TITLE);通过这句窗口特性请求,我们使用Window.FEATURE_NO_TITLE就可以轻松的让窗口做到了无标题显示。 2.setContentView(R.layout.snake_layout);设置窗口的布局文件,这里Android123给大家说明的是,这里的snake_layout使用了自定义资源标签的方式,大家注意学习:这里我们可以看到来自SnakeView这个派生类的名称,由于Android内部的R.资源不包含SnakeView类,所以我们必须写清楚Package,比如com.exmple.android.snake.SnakeView 然后和其他控件使用一样,都是一个id然后宽度、高度、以及自定义的标签tileSize(尾巴长度),如下: <com.example.android.snake.SnakeView android:id="@+id/snake" android:layout_width="fill_parent" android:layout_height="fill_parent" tileSize="12" /> 3.这里Snake作为主游戏窗口,包含了重载的暂停Activity,通过Avtivites类的生命周期我们可以了解到,当窗口切换到后台时会自动调用这个重写的方法,类似C++的纯虚函数,如下: @Override protected void onPause() { super.onPause();} 4.同时在游戏退出时重写了onSaveInstanceState方法来保存窗口实例,就是游戏的进度。 @Override public void onSaveInstanceState(Bundle outState) {} 这里我们就简单说明下简单游戏的框架设计,明天我们继续讲解下TileView和SnakeView的设计,这个例子相信大家都能看懂,不过Android很多新的绘图方法希望大家了解,Android平台的View设计,如果有什么疑问可以发送到android123@163.com或访问bbs.android123.com,我们会作回复。
Android示例程序Snake贪食蛇代码分析(二) Android开发技术
上一次我们大概讲解了下Android SDK中的演示程序Snake游戏的主框架,今天我看来看下实现的基础类TileView,从名称上不难看出这是一个方砖类,就是生成一个方块。TileView使用了Android平台的显示基类View,View类是直接从java.lang.Object派生出来的,是各种控件比如TextView、EditView的基类,当然包括我们的窗口Activity类,这些在SDK文档中都说的比较清楚。 这里定义了5个int型全局的变量,分别是方砖的数量mTileSize;方砖水平x防线的数量mXTileCount;以及竖直y方向上的方砖数量mYTileCount,下面是一个相对偏移位置mXOffset和mYOffset;这里android123主让要大家了解如何自定义View在Android开发中,在一个View类中主要是重写onSizeChanged方法来控制改变部分,以及onDraw实现画布的修改,实现的简写如下: @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {} @Override public void onDraw(Canvas canvas) { super.onDraw(canvas);} 我们自定义的TileView类需要自己添加一个构造方法,根据需要,我们还重载了一种包含样式的方法,这里大家可以多看下Gallery控件的实现,就好理解了,下面是基本框架。public TileView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);} public TileView(Context context, AttributeSet attrs) { super(context, attrs);} 在贪食蛇游戏中我们知道Snake是移动的,所以加入了一个清除显示的clearTiles方法,通过一个二维数组保存一个gird网格型的运动轨迹,下一次我们将会讲解android贪食蛇的游戏逻辑和完整的关联拼接实现。如果有疑问可以在bbs.android123.com讨论。
Android示例程序Snake贪食蛇代码分析(三) Android开发技术
今天我们分析下最复杂的SnakeView的设计,它是派生于TileView方砖类,TileView构建是基于Android直接的显示类View,如果不明白的可以查看Android示例程序Snake贪食蛇代码分析(二)一文有关TileView类的实现, 首先我们看到整个游戏分 READY、PAUSE 、RUNNING 、LOSE四种mMode状态模式,分别对应准备、暂停、运行中、结束(死亡),毕竟贪食蛇没有胜利这个结果。 整个Snake的运行分4个方向,NORTH、SOUTH 、EAST、WEST分别对应了北、南、东、西四个方向,其中变量mDirection对应当前的方向,而mNextDirection对应下个运行时的位置。这里星星分3种,使用的是一个Drawable图片,分RED_STAR、YELLOW_STAR和GREEN_STAR三种颜色,游戏的星星出现位置由Random随机数生成器来决定,这里Random一般和Timer系统时钟来随机生成更真实一些,通过一个Handler对象来控制画面的更新,使用了this.update();和this.invalidate();这两个本地方法,Update和invaildate均为android.view.View类的本地方法。这里资源的使用通过Resources r = this.getContext().getResources();获取了r对象的实例,通过r.getDrawable(R.drawable.redstar)获取资源名为redstar的资源,返回的是一个Drawable对象。 对于按键信息,直接重写View类的onKeyDown方法,这里KeyEvent传递的是按键的映射,比如KEYCODE_DPAD_UP向上,KeyEvent.KEYCODE_DPAD_DOWN向下等等,详细的查看SDK中的onKeyDown @Override public boolean onKeyDown(int keyCode, KeyEvent msg) { if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {} } 整个游戏的控制流程就是上面这些,对于游戏的逻辑而言比较简单,这个贪食蛇并没有包含3D设计和类似Nokia的能量走廊、6边形轨迹,有空了我们一起来完善一个3D的贪食蛇游戏。
Android窗口编程(无标题,全屏) Android开发技术
很多时候我们设计的Android程序需要全屏显示或无标题,通过编程的方法控制窗口信息,这里在Activity中的onCreate方法执行时requestWindowFeature(Window.FEATURE_NO_TITLE);可以实现无标题,而全屏可以加入getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 这句实现整个窗口的水平和垂直都处于全屏状态,更多Android开发技巧可以关注android123.com.cn的FAQ栏目。
Android后台程序运行一段时间不工作了? Android开发技术
可能部分Android程序长期运行的后台程序过一段会不工作或自动消失,这主要是因为Android平台生命周期造成的,使用过G1的网友都不难发现一个道理,每个软件似乎都没有设计退出按钮,谷歌在设计时为Android设计了一个HistoryStack历史栈,这里系统会自动管理整个程序的生命周期,但当系统运行的程序不断增多时系统开始有选择性的结束部分程度的进程,首先后台Service服务可能会被先结束,而前台的窗口Activity会有更高的优先级。如果保证自己的程序不被过早的Kill,其实只需要运行一个线程不断的维护处理常规的事情,比如开个Timer都是可以解决问题的。
Android开发教程,轻松学Android软件开发 Android开发技术
Android开发网推出Android开发教程,网友可以轻松学习Android手机软件开发。我们将会以深入浅出循序渐进的方式剖析Android SDK,通过简单实例,图文并茂的方式让您轻松掌握手机软件开发。
Android开发环境搭建图文教程 Android开发技术
Android开发首先需要搭建完整的开发环境,由于软件均是基于Dalvik Java Virtual Machine运行的所以Google官方推荐使用主流的Java开发IDE Eclipse。我们需要下载必要的开发组件。 1)Java运行时库(JRE),由于Eclipse使用Java开发,所以需要它才可以正常运行IDE。 2)Eclipse集成开发环境,官方提供的Android开发插件ADT Plugin是基于Eclipse编写的,当然用户可以使用NetBean、JBuilder当作代码编辑器使用,但目前没有完整的调试集成。 3)Eclipse ADT Plugin插件是Android Develop Tool Kit的插件,用户需要安装它才能在Eclipse中建立和调试Android程序。 4)Android SDK,它包含了完整的Android模拟器 、Android开发文档和调试工具,Google官方也会定时更新,最新的公开版本为2008-3-3 m5-rc15 以上提到的4个必备工具需要在下面页面中下载安装 Android开发包下载 首先我们将下载的JRE安装,然后解压缩Eclipse和Android SDK。运行Eclipse开发环境。
Android平台View的按键事件KeyDown用法 Android开发技术
我们继续讨论下Android游戏开发的一些前置知识,平时设计自己的显示类View时需要捕获按键事件,比如KeyEvent、首先引入android.view.KeyEvent类,直接重写onKeyDown方法,同样在键盘上每个按钮都对应一个Scancode扫描吗,详细的定义在KeyEvent类中有,直接查看Android SDK中的定义,实现的方法如下: public boolean onKeyDown(int keyCode, KeyEvent msg) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { // 按下中键时触发的事件,这里android123.com.cn提醒网友G1或ADP1使用的是轨迹球,这个Trackball仍然可以按下的,不仅仅是方向的导航。 return (true); } if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) { //向左 return (true); } if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) { //向右 return (true); } if(keyCode == KeyEvent.KEYCODE_DPAD_UP){ //向上 return (true); } if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){ //向下 return (true); } return super.onKeyDown(keyCode, msg); } […]

Android屏幕自动旋转-Sensor属性 Android开发技术
使用Eclipse+ADT插件开发Android程序的网友可以通过,ADT Plugin来很好的处理相关的layoutxml布局以及android开发环境的细节设置,今天我们让Android屏幕自动旋转,使用G1或ADP1的网友会发现均内置了加速感应器,可以感知方向。这点提醒网友不要贪图便宜购买山寨机而缺失这一重要特性。 如何让程序自动随屏幕而旋转,今天我们不要写一行有关SensorListener代码,直接在Package Explorer中,这里以android123.com.cn这个Demo程序为例,首先选择androidmanifest.xml文件,在右边选择Application属性,这点仔细看图中的标号,然后单击我们的Activity窗口类的名称,这里我们使用的是android123,demo创建的程序,选择.Demo,如图1: 接下来后滚动条往下拖,可以看到Screen orientation这个屏幕方向选项,我们选择sensor即可使用加速感应器自动识别调整程序的显示方向,效果在真机中测试你就发现了,但感应器的电能消耗还是比较大的 相关的代码可以直接加入,在activity中加入下面加粗部分即可,<activity android:name=".demo" android:label="@string/app_name" android:screenOrientation="sensor" >

Android编程向导电子书下载(PDF格式) Android开发技术
Android编程向导(ANDROID A PROGRAMMER’S GUIDE)一书的PDF版格式电子书下载,该书是最早的谷歌Android软件开发的书籍之一,稍微有点编程知识的人相信很容易掌握本书的内容。 入门方便的有Android各种界面控件比如TextView、EditText、ListView的使用,如何使用xml方式来布局界面,结合着SDK文档来看相信你很容易理解Java这样的高层面易懂的编程方式。 Android123本地下载 http://down.android123.com/android-book.pdf

Google开发者日有关Android平台资源 Android开发技术
2008年Google在北京举行的开发者日中部分涉及了云计算的内容,比如AJAX API调用Web服务,Android以及Dalvik VM以及浏览器Gears组件等一些应用的视频会议,在下面这个官方网站中可以找到视频录像以及PDF资源下载。有兴趣的网友可以查看下面相关的内容: http://sites.google.com/site/developerdaychina/
SharedPreferences存储类效率分析 Android开发技术
SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长整形、Int整形、String字符串型的保存,它是什么样的处理方式呢? SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问,android123提示最终是以xml方式来保存,整体效率来看不是特别的高,对于常规的轻量级而言比SQLite要好不少,如果真的存储量不大可以考虑自己定义文件格式。xml处理时Dalvik会通过自带底层的本地XML Parser解析,比如XMLpull方式,这样对于内存资源占用比较好。
Android中的XML解析各种方式对比 Android开发技术
随着Web2.0的兴起XML越来越受大家重视,作为一种标准的数据存储方式Android是如何支持的呢? 在android平台中提供了多种xml parser解析器,常见包含dom、sax、pull这样的主流方法。目前G1的处理器和内存相对于MIDP设备来说大了很多,对于数据量小于10KB以内的文件使用Dom方式比较方便,主要是XPath查找很好,android123提示如果是一个属性之多的大型文件可以通过sax这样的单向流方式解析,它的好处就是不占用太多的内存,但是控制起来和代码量都是比较大的。这里和J2ME的KXML相同的内核。 Android平台中相对于常规的存储,SharedPreferences足够保存,但是他无法很好的处理外部文件,比如存放在sdcard中的内容,而XML可以很好的决绝,对于复杂的文件和多种方式查询,可以使用结构化的数据库语言SQL来解决,不过SQLite的性能一直表现一般,在资源占用上还是很大的。
Android开发过程中很多特性受权限影响 Android开发技术
如果在开发你的Android软件时莫名奇妙的无法通话,首先使用Logcat查看调试信息,一般出错的问题都是Loe.w的橙色权限提醒问题,当然还有很多高级的系统操作都需要Root权限,Android平台在设计时仍然存在很多的问题,比如Activity的生命周期,如果有部分软件设计缺陷会导致系统运行缓慢而无法关闭,解决的方法在没有Kill Process的情况下只有重启的你的G1,还有部分使用ADP1开发机的用户软件在release时一定不要忘记在g1上测试,否则很多问题都是因为权限而放弃。 相关的常规权限可以查android123的 Android权限列表permission说明
Android视频播放类VideoView解析 Android开发技术
目前Android平台作为Google自己封装设计,提供的Java Dalvik在算法处理效率无法与C/C++或ARM ASM相提并论在描述或移植一些本地语言的解码器上显得无能为力,目前整个平台仅支持MP4的H.264、3GP和WMV视频的解析,快速的制作一个系统播放器可以通过使用Android内置的VideoView类来处理,因为JNI本地调用的so库都必须独立高权限安装,我们不再赘述C层的实现方法,因为调用的都是接口原理均为一样。 VideoView使用很简单,在过去的几个版本中有了简单修改,我们可以在实例化这个类时传递一个本地的路径比如\sdcard\android123.mp4、或一个InputSream对象,当然对流媒体的Uri支持也是没有问题的。 这里我们调用的例子直接构造,动态设置文件路径,有关详细的方法可以查看SDK,下面是设置路径的,基本上设计一个播放器核心代码在10左右,目前真个解码器平台尚未完善,比如Flash等FLV解码器的支持还需要固件的升级,这里可以使用Android视频转换王来解决G1上的播放问题。 VideoView vv; vv = new VideoView(this); vv.setVideoPath(filePath); //绝对路径 w.setVideoURI(uri); //传递一个uri
OpenGL ES API介绍,Android游戏开发必备 Android开发技术
Android平台中底层包含了OpenGL ES库,这里我们直接在工程中导入import javax.microedition.khronos.opengles.GL10; 库,直接实例化OpenGLContext的对象mOpenGLContext就创建了一个3D的支持接口,通常我们需要自己构造一个场景类重写下面三个方法protected void onAttachedToWindow() 、protected void onDetachedFromWindow() 、 protected void onDraw(Canvas canvas)。 通过创建OpenGLContext对象,直接实例化GL10,这里10代表1.0版本,GL10 gl = (GL10)(mOpenGLContext.getGL()); 即可完成。在onDraw中处理canvas需要在开始和结束分别调用canvas绘制的mOpenGLContext.waitNative和waitGL(); 作为开始和结束,和DirectX相比OpenGL在轻量级的处理性能还是很不错的。
Android平台底层限制太多 Android开发技术
目前仍然有很多程序无法完成在标准的Android平台,同时ADP1被禁止访问Market很多问题仍然变得无法很好解决,没有Root权限导致了无法很好的解决底层的问题,比如安装驱动、安装一些本地库,如果Google在工程模式下严格控制数字签名问题那么限制就更大了。 目前不开放Android底层无法完成的问题,设计使用手写输入法识别库,从Java层来说处理OCR这样的算法效率依然很低,速度和性能仍然无法得到平衡,如果有Root权限就可以安装自己的Native库,否则只有进行修改定制自己的ROM。Root权限的缺乏导致了程序不能被结束进程,一些设计有问题的程序只有在重新启动后才能解决(虽然Activity有自动的force close保护,但问题还是很多的)。 使用自定制ROM对于在未来的OMS平台上仍然存在一些问题,oms在Widget、手写输入上都已经实现,最终的测试还要等到oPhone上市,近期Android开发网(android123.com.cn)推出一些简单的游戏设计教程。
有关Android签名问题总结 Android开发技术
在整个平台的安全性方面Google也使用了Android签名机制,当然这里使用Sun的针对Jar文件签名工具jarsigner即可,这里我们需要了解一些问题,为什么要签名? 其实安装到真机G1的软件都必须签名。 平时我们在Android Market上下载的软件都必需签名,所以说上传时是免不了这个操作的,常规的签名步骤可以查看 Android签名用keytool和jarsigner制作apk文件 这点Google设计的还好,没有像Symbian那样针对S60第三版和第五版都需要花费每次200美元的测试费用,如果遇到了ZipException invalid entry compressed size的错误方法过去我们在无法对jar进行签名,Android jarsigner问题一文中提到了,主要原因是平时Eclipse使用的ADT插件已经赋予了DEBUG权限的数字签名,我们可以通过导出一个未签名的APK文件就可以解决,参考如何导出一个未签名的APK文件?即可顺利的签名。

Android开发机1.1固件允许访问付费软件 Android开发技术
近期Google表示封锁Android开发机(ADP1)对Market付费软件的访问,而过去很多开发人员花费399美元+25美元注册费用购买的Android Dev Phone无法购买高级软件表示了不满,近期Google推出了新版针对ADP1 1.1固件,通过新的Copy-protection拷贝保护机制在最大限度上保护版权,昨天我们已经介绍了 Market新功能,保护你的Android软件安全 方法,其实这样做仍然不能阻止我们使用自己的开发板来修改进行访问,不过在安全技术上似乎Google采取了IMEI+SIM卡的IMSI进行了多重的验证,如果不封IP、不判断Android设备码的情况下,破解还是可以进行的。 Android Dev Phone 1的1.1固件改进: 支持语音搜索功能 Voice Search付费应用程序 Market闹钟问题修正 Alarm Clock发送Gmail卡死问题修正邮件提醒和刷新间隔地图功能可显示商业评论 Latitude

Android HomeScreen Launcher解析(一) Android开发技术
很多网友在邮件中提到了Android的桌面Home Screen有关的开发,我们可以看到常规的桌面上有3个Widgets,比如一个Clock、Search 和不常用的Phooto Frame像框,整个桌面响应的是android.intent.category.HOME这个Intent Action。目前由于权限问题我们无法在原始的Google桌面程序添加Widget在行规的没有Root权限的机器上,其实就是一个provider操作,但我们可以通过自己获取android.intent.cateory.Home这个action来替换掉系统默认的程序,这样就可以自定义我们的Android桌面为类似iPhone等样式。 在Git中我们可以直接获取Launcher,进行修改分析,整个桌面的设计主要是捕获一些常规的事情,比如新装程序在桌面上创建快捷方式、提供Widget的移动等等,可以加入一些类似天气预报、RSS订阅等功能,详细的我们下次解析,涉及图片中的Widget如下:
Android支持PDF和Office需要底层支持 Android开发技术
目前Android平台提供了高层的Java语言开发虽然在进度上可以很好的控制,但处理一些效率敏感的算法仍然不能让人满意,目前QuickOffice公司已经推出了Android操作系统上的Office软件可以读取、编辑Word、Excel文档,但是在测试时发现并非我们想象的那么顺利,在打开一个400KB的Word文档时几乎用去了至少30秒,而在编辑方面几乎无法操作,除了force close外还是看到了缺乏底层的无奈。 而PDF解析上同样存在很多问题,不过G1的运行内存还是比较大,处理起来相对顺利,不过仍然和Windows Mobile自带的Office Mobile无法想提丙纶,目前随着微软向Office 2007格式的兼容,对于docx这类的全新格式,在解析库上还需要进一步更新。而唯一很好的解决方式就是等待Google自己和微软、Adobe合作,有消息表明和Adobe的合作还是比较顺利,未来的Android平台会预装Flash 10 Lite提供更多的支持,比如Flv视频解码器、Flash游戏、动画等支持。
Android自定义Adapter步骤 Android开发技术
Android中提供了大量的适配器Adapter,常见的有BaseAdapter、SimpleCursorAdapter、CursorAdapter等等,其中包含Cursor可以自动和数据库关联。一般在ListView中我们需要定义一些显示的内容,需要用到继承Adapter实现窗口的子类化。 一般我们需要重写Adapter类的四个方法即可,分别是public int getCount() 、public Object getItem(int position)、public long getItemId(int position)和public View getView(int position, View convertView, ViewGroup parent) ,调用时仍然是在ListView或ListActivity中直接setAdapter(CustomAdapter);即可,比较典型的方法参考Android的自带控件Gallery的实现,详细的在API Demo中查找即可。

