大多数过去做MIS或OA系统的可能都很熟悉数据库相关的操作,Android平台和Windows Mobile一样都支持本地的SQL数据处理,这点Android使用了比MySQL嵌入版更轻量级的SQLite,Google有关Android数据操作的方法提供一个高层的封装就是ContentProvider。一组数据操作可以使用ContentValues对象来完成度或写,ContentValues提供了put和get两种方法分别对应设置和读取,如果对于原始SQL语法比较了解还是建议使用更为灵活的raw执行语言比较快。 主要注意的是Android中使用的SQLite受数据库版本因素而限制,SQLiteDatabase是原始的数据库操作类,提供了createDatabase方法来创建一个新的数据库,最终保存为.db格式的文件,而已经存在的数据可以使用openDatabase方法直接打开,使用execSQL方法可以直接执行SQL语句,完成插入、更新、删除等等,而查询也可以使用本地的SQL语句直接完成,使用rawQuery方法即可,这样会返回一个Cursor对象,我们直接遍历Cursor使用movetoFisrt和movetoNext方法进行遍历查询。直接使用getString或getInt等方法获取每列的数据即可。 而ContentProvider方式比较简单,大家直接看Android SDK中的NoteList例子就很好理解了。
April 2013

Android开源输入法OpenWnn解析 Android开发技术
随着四月份的到来,Android平台Cupcake更新分支包即将完成,最新的应用程序中多出了Camrecorder这个视频录制程序,Android开源输入法OpenWnn,同时T-Mobile G1和ADP1用户都可以在下个月得到Cupcake更新的推送通过OTA方式,本次的改进是Android平台自1.0出现以来真正意义上的变革。 在git中我们已经可以看到Google的中文输入法支持,在词库设计方面还是支持联想的,效率表现的一般,屏幕键盘的出现将让中国大陆地区HTC Dream用户实现以下改进: 1.中文显示界面,在国家时区设置中修改为 GMT+8的北京,整个界面变成简体中文版。 2.中文输入法,目前Android平台的中文输入法已经完成了,通过OpenWnn可以清楚的看到这个来自日本的 omronsoft公司提供了亚洲地区语言的输入框架,OpenWnnZHCN类可以帮助我们实现中文相关的处理,而中国移动OMS手机中已经支持了手写操作,如下图 3.在短信息部分,Google官方已经测试到了PDU编码类,在非7位的标准GSM编码中无法执行到catch的bug,对于使用unicode地区的国家将会直接使用UCS2编码,所以中文短信发送上也得到了解决。 4.不过目前Android平台对于SIM卡STK功能完善的不是很好,比如使用中国地区大陆的SIM卡不会显示移动的SIM卡菜单表。
oms和android在开发上有什么不同? Android开发技术
部分网友对中移动OMS平台和谷歌Android相比到底有什么不同,这里我们主要来说下它们之间几个不一样的地方。首先有必要了解下OMS,OMS是根据开源Android修改而来,由中国移动主持和北京博思通讯联合开发,支持TD-SCDMA、CMMB等特性的中国特色Android手机。全称为Open Mobile System,详细的可以在oms手机网了解。 1.OMS在很多组件上和Android是完全一样的,仅仅是UI改变了,在RIL层上部分会兼容TD,还有OMS还有很多中移动的附件组件,139邮箱、手机电视、飞信等等都是CMCC所有,当然还有部分第三方小公司的产品,比如词典了、部分游戏等等。 2.目前我们测试的Dopod Magic使用了OMS系统,从关于信息可以看到使用了Android1.1固件,但版本号比较有意思和过去MOTO的某款经典机型一样为A188,在开机时也可以看到,在基带、内核上版本和我们的熟悉的RC33没有太大区别,不过最终还是使用了cupcake更新,在输入方面可以看到已经完善了。 3.开发方面我们可以看到最终OMS的桌面将会有两套方案,G1主屏和博思主屏,博思主频多出了一个名为Widget家园的程序,这里可以让我们看到整个Home Screen变换成了类似iPhone的外观或者说魅族M8的桌面,虽然不是很有什么创意不过还是算做了些改进,否则和Android也太像了,更多的都是在UI上的修改。 4.最终OMS上怎么开发呢? Java的IDE还是Eclipse,编译器还是ADT,生成的还是APK文件,最终不同的仅仅是运行在国产的手机上,目前已知的终端有HTC Magic的Dopod G2版本还有联想oPhone。可以在oPhone手机网中了解。

Android Widget开发 Android开发技术
近期Android 1.5 SDK中加入了不少开发框架,AppWidget framework 可以方便的在Android桌面上开发Widget小工具,在过去我们已经看到了Live Folder中,下面就以Google官方的一个例子来做介绍吧. 首先我们需要计算下最小高度, 默认情况下Android桌面使用的是基于网格的布局,使用下面的公式可以很好的处理: Minimum size in dip = (Number of cells * 74dip) – 2dipIn this example, we want our widget to be 2 cells wide and 1 cell tall, which means we should request a minimum size 146dip x 72dip. We’re also going to request updates once […]

Android Live Folder开发介绍 Android开发技术
谷歌在最新的Android平台中加入了Home安全和Widget框架,同时在桌面UI上引入了新的Live Folder对象,在过去我们可以把这个对象当作一个容器来存放一些常用的图标,而本次Android 1.5 Cupcake中的Live Folder有了大幅的增强。比如加入e-books、e-mails查询以及RSS feeds检测,甚至是音乐的playlists都可以很好的完成。 这样大大方便了用户的操作。Android标准的桌面被分割成为了3个部分,用户有足够的空间来自定义排序整个显示效果比iPhone的n宫格显得更整洁。开发LiveFolder我们应该从开源代码从的Launcher中获取更多参考的接口,以及在1.5 SDK中了解更多内容。

ADP1 1.5 Cupcake更新固件下载 Android开发技术
近日HTC发布了有关Android Dev Phone 1的1.5固件包,购买了Android开发机ADP1的用户可以手动的更新到最新的Cupcake,其中主要包含 Radio Image 无线映像 ota-radio-2_22_19_26I.zip 、System Image 系统映像 signed-dream_devphone-img-147201.zip、Recovery Image 恢复映像 signed-dream_devphone-ota-147201.zip 下载地址可以查看HTC官方网页 http://www.htc.com/www/support/android/adp.html#s3 里面可以找到详细的更新步骤

ADT 0.9插件XML创建工具 Android开发技术
Android ADT Plugin 0.9插件中新增了所有类型的XML文件创建,开发人员可以方便在创建各种类型的XML文件通过New Android XML File对话框,比如说Layout可以创建出有关界面布局的文件,Values可以创建出常规的字符串、数组资源文件,Menu可以创建菜单项目,而Preference可以直接设计参数类型对话框,Searchable为搜索框以及动画Animation类型,其中目前AppWidget Provider是不可选的内容。 而整个Android项目的全局文件androidmanifest.xml中可以设置运营商MCC国际代号Conrty Code、MNC网络代号Network Code。语言Lanuage区域Region,程序启动方向Orientation,像素间距Pixel Density,触控Touch Screen,Keyboard键盘类型,Text Input输入框,如图

Android API Level介绍 Android开发技术
随着Android 1.1、1.5固件的推出目前整个SDK将API分为了多个版本,其中T-Mobile G1刚刚推出时的固件版本为1.0 API Level为1.下面是一个简单的对应关系:下面是ADT 0.9创建新工程时的选项,如果已经选择后可以在androidmanifest.xml文件中修改Min SDK Version的值来设置,如果使用了新的API最终目标的平台必需兼容,而高版本的API向下兼容,使用老版本SDK开发的程序仍然可以工作在最新的固件。 Android 1.0 固件 API Level为1 Android 1.1固件 API Level为2 Android 1.5固件 API Level为3.
OMS开发平台介绍 Android开发技术
近期随着oPhone手机的上市,中国移动的OMS平台相关的开发内容。Android123已经做了两个专题内容网站,帮助大家了解 BAE开发网以及OMS开发网。这里广大的网友放心。Android程序可以完全兼容OMS平台,它们的二进制编码完全相同仅为APK文件。 BAE是Browser based Application Engine的简称,主要开发方式为HTML+JavaScript。这里仍然是一个MVC的模型,开发人员通过Html+CSS来布局窗口界面,使用JS脚本控制逻辑。这里网络传输均使用Ajax技术。BAE最终运行在widget家园中的微技管理器中。详细的开发可以参考上段中我们提到的学习资源站点。 OMS是Open Mobile System的缩写,是CMCC深度定制的一款基于Android二次开发系统,目前联想O1使用该平台,支持TD网络。这里提供了全新的Home Screen,快讯开发、飞信API使用。详细的DCDProvider、Fetion API我们会在上文提到的站点提供完整的资料。

Android 1.5开发体验 Android开发技术
很多网友对于Android 1.5 SDK还是比较陌生了,过去出现的问题,我们已经在前期内容中讲到API兼容问题,以及ADT 0.9插件无法安装的解决方法,此前出现两个版本的1.5 SDK一个为preview预览版和release 1正式发行版。需要android开发人员注意,同时最新的adt插件是时 0.9.1.v200905011822-162 ,需要大家确认,这里新增的Android Virtual Devices Manager可以帮助开发人员快速的配置自己的API Level以及模拟器的各个特性,比如Sdcard映像的大小、最终的固件版本可选1.1和1.5以及模拟器的屏幕,比如HVGA、QVGA以及相对应的横屏模式。 而新的layout布局工具也有很大的改进,界面的设计基本上可以做到可视化,但是复杂些的xml结构或细节的出错都会遇到null空指针的bug,这里Eclipse配合插件明显不如微软的Visual Studio来的稳定。

Dalvik Debug Monitor Android调试工具 Android开发技术
很多网友对于一些常的Android规程序性能测试、文件管理或屏幕截图均使用Eclipse中的DDMS插件来查看,其实通过SDK中提供的Dalvik Debug Monitor可以很好的调试Android程序,这里可以更直观的现实设备的各种信息,除了Logcat、VM Heap堆查看、Thread线程状态外,在菜单的Device中可以找到Screen capture来截图、File Explorer进行文件同步操作,使用Show process status可以显示设备当前的进程状态,以及 快速的过滤Logcat信息,可以分析无线状态radio state、程序状态app state等等。这里支持模拟器和真机的显示,该工具可以再android-sdk-windows-1.5_r1\tools\ddms.bat找到,目前我们测试环境为Windows平台,下次讲述下CentOS中的操作,如图:
Android中MediaRecorder类实现视频录制 Android开发技术
在最新的Android 1.5版本中开始支持视频录制功能,通过MediaRecorder类的相关方法可以录制视频保存成为MPEG4、H.263和H.264编码的视频。这里很多网友发现自己的代码无法正常执行,首先确定设计预览对象Surface,可以通过setPreviewDisplay()方法实现,同时调用prepare()要在设置预览前执行。这里可以可以设置音源MIC、输出声音的格式3GP,设置编码为AMR。视频源为CAMERA,编码为MPEG_4。最终保存成一个MPEG4的文件,设置好输出文件的路径即可,这里我们还可以通过setVideoSize和setVideoFrameRate方法设置视频的分辨率以及帧数。示例代码参考 recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); recorder.setOutputFile(filePath); 测试OK后给大家一个sample,注意视频录制是一个比较好资源的事情,考虑到性能要开一个线程单独处理。

Android 2.0揭秘,Donut新特性曝光 Android开发技术
在未来的3~6个月,Google Android平台将会升级到2.0版本,这个代号为Donut的分支将会加入本地和Web搜索、手写识别、 Google翻译和文本发音text-to-speech特性,从官方的GIT中可以看到Android Donut中把汗了Svox语音引擎,整体的构架在下面的图片中可以看到,这个来自瑞士的Svox公司已经于上周加入了Google OHA联盟。目前 SVOX Pico TTS 已经支持6个国家的语言发音,包含U.S. 、U.K. English, German, French, Spanish和 Italian,相信大家对Android 2.0已经有些期待了吧。

Android Scripting Environment 介绍 Android开发技术
谷歌已经发布了一个工具针对Android操作系统可以编写简单的脚本程序,无需PC上开发的ASE(Android Scripting Environment )将帮助程序员访问大部分的功能通过下载一些简单的脚本,其实现原理和OMS的BAE平台十分相似,详细的可以参考 BAE开发网中的相关W3C Widget例子。 不过相对于传统的Web层面Widgets而言,ASE的功能可以控制GPS、接收感应器数据等等,最终脚本进程运行在后台,你可以创建自动回复服务在来电屏幕程序,同时可以静音来电应声等等。 目前整个实现过程比较简单。
android.appwidget类剖析 Android开发技术
随着Android 1.5的普及很多网友发现SDK中多出了appwidget这个框架。作为使用Java语言设计的Widget相比目前主流的W3C Widget有更好的运行效率和底层控制能力,今天我们就Android平台上的Widget开发做主要的讲解。 首先我们需要在androidmanifest.xml文件中加入receiver节点来接收系统广播,声明BroadcastReceiver类的方法可以直接使用intent filter来过滤系统信息,下面来自SDK中的写法。 <receiver android:name="TestAppWidgetProvider" android:label="@string/cwj" android:icon="@drawable/smart_icon"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> //这里我们需要捕获的是APPWIDGET_UPDATE这个动作 </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_info" /> //定义meta数据,见下面的appwidget-provider </receiver> 我们定一个AppWidgetProviderInfo 结构,用来描述这个widget的外观,这里和layout的布局有些相似,可以设置最小的宽度为40dp,最小高度为30dp。 <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="40dp" android:minHeight="30dp" android:updatePeriodMillis="86400000" //回调Timer,单位为毫秒。这里是1天=60X60X24X1000,Android手机的电能有限,频率不能太高,最好让用户自己控制 android:initialLayout="@layout/test_appwidget" //初始化时的主要布局 android:configure="com.android.tests.appwidgethost.TestAppWidgetConfigure" > </appwidget-provider> 在Widget中主要使用AppWidgetProvider做基类,刚才我们定义的BroadcastReceiver主要是更新动作ACTION_APPWIDGET_UPDATE ,与此之外还有ACTION_APPWIDGET_DELETED、ACTION_APPWIDGET_ENABLED和ACTION_APPWIDGET_DISABLED分别表示删除是、启用和禁用时触发的事件,这里是系统广播。我们通过 BroadcastReceiver类的onReceive方法来捕获。 下面的Java广播动作获取代码如下: public void onReceive(Context context, Intent intent) { String action […]
Android NDK之JNI使用例子 Android开发技术
目前Android NDK只能编译出动态库.so文件,并不是能生成.apk文件,这里我们简单介绍下NDK中的Hello JNI列子。整个例子分Java和Native C两个部分。首先是我们常用的Java端调用部分。 package com.example.hellojni; import android.app.Activity;import android.widget.TextView;import android.os.Bundle; public class HelloJni extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText( stringFromJNI() ); //如果调用失败将会抛出 java.lang.UnsatisfiedLinkError异常 setContentView(tv); } //注意下面的native关键字 public native String stringFromJNI(); public native String unimplementedStringFromJNI(); static { System.loadLibrary("hello-jni"); //载入hello-jni库 } } 需要注意的是这里必须设置SDK版本为1.5或以上版本即在androidmanifest.xml文件中指明<uses-sdk […]

Android Widget开发指导-翻译 Android开发技术
Widget是Android 1.5的一个新特性,允许程序显示一些常用而又重要的信息在用户的Home screen(桌面主屏)上,标准的Android系统映像包含了一些示例widgets包括指针时钟、音乐播放器和其他工具如Google搜索栏。(Widgets are a feature introduced in Android 1.5. A widget displays an application’s most important or timely information at a glance, on a user’s Home screen. The standard Android system image includes several examples of widgets, including widgets for Analog Clock, Music, and other applications.) 正文Android开发网不做过多的赘述和翻译,仅仅作一些提示,相信结合图片网友可以很好的理解掌握,毕竟Widget和标准的Apps相比没有太大的区别,更多的是在UI上的处理,逻辑执行还是设计成服务更稳定和更高的可靠性。 标准Widget剖析(Standard widget anatomy) […]

