1、智能手机应用开发,based on android 2011.5,内容包括:,1、Android 平台概述2、搭建 Android 开发环境3、第一个 Android 应用程序4、Android 用户界面设计5、Activity、Intent、Service、Broadcast Receiver6、Android 中的数据存取7、Android 的多媒体应用8、应用实例:a、b、c、d,课程结构,开放手机联盟(OHA) Android 平台综述: 平台介绍、开发者社区 开发环境: 构建 Android 开发环境 应用程序: 应用程序结构 典型应用: 用户界面、图形编程 数据存取、网络连接 硬件
2、访问,获取 Android 资料的途径,http:/ http:/ 下载 sdk 等相关软件 查看文档 在线帮助 开发社区 国内需要代理才能访问 http:/ news sdk下载 开发FAQ、源码下载 移植,6、Android 中的数据存取,on android,数据存取方式,Preference “键-值”方式存储,以 xml 文件的形式保存 File 采用 java.io.* 库所提供 I/O 接口读写文件 SQLite SQLite 是轻量级的嵌入式数据库引擎 Content Provider 用于实现不同应用程序之间的数据共享,1、Preference,主要用于存储数据较少的场合,比
3、如配置信息 文件位置:/data/data/shared_prefs/*.xml 需要用到接口:SharedPreferences 及其内部接口:SharedPreferences.Editor 取得接口: Context.SharedPreferences(filename,mode) SharedPreferences.edit() 数据类型、数据操作: int、flaot、string、boolean等 putString(key,value) getString(key,defValue),实例:Test_of_Preference,定义 main.xml: 一个 EditText 用
4、于键入数据 三个 Button 分别用于将数据写入 xml 文件、从文件获取数据并显示、清除文件中的数据定义 sharedpreferences.xml: 一个 TextView 用于显示从文件中获取的数据,et1=(EditText)findViewById(R.id.editText1); button1=(Button)findViewById(R.id.button1); button2=(Button)findViewById(R.id.button2); button3=(Button)findViewById(R.id.button3);,textView1=(TextView)
5、findViewById(R.id.textView1);,创建接口 sp1、spEditor1以键值 方式加入数据以 String Key 为索引来获取数据清除数据,private SharedPreferences sp1; sp1 = this.getSharedPreferences(“test“, MODE_PRIVATE); SharedPreferences.Editor spEditor1 = sp1.edit();,spEditor1.putString(“TEXT“,et1.getText().toString(); spEmit();,String string1 = s
6、p1.getString(“TEXT“, “); textView1.setText(string1);,spEditor1.clear().commit();,运行结果:,2、File,文件可用来存放大量数据,如文本、图片、音频等 默认位置:/data/data/files/*.*java.io.* 库提供 I/O 接口实现本地文件读写文件输入流的获取 Context.openFileInput(String name) 文件输出流的获取 Context.openFileOutput(String name,int mode) 包内资源(res/raw/)文件的读取 Resources.op
7、enRawResource(R.raw.file),实例:Test_of_File,定义 main.xml: 两个 EditText、两个 Button 写文件 writeFile(str):,private void writeFile(String str)tryFileOutputStream output= openFileOutput(FILE_NAME,MODE_APPEND);output.write(str.getBytes();output.close();catch(Exception e)Log.e(“File_IO“, e.toString();this.finish(
8、); ,读文件 readFile():,private String readFile()tryFileInputStream input = openFileInput(FILE_NAME);byte buffer = new byteinput.available();input.read(buffer);input.close();String str = new String(buffer);return str;catch(Exception e)Log.e(“File_IO“, e.toString();this.finish(); return null; ,editText2.
9、setText(readFile();,运行结果:注意:写文件时用的 MODE_APPEND 模式,3、SQLite,SQLite 轻量级嵌入式数据库引擎,面向资源有限的设备 没有服务器进程 所有数据存放在同一文件中 跨平台,可自由复制 SQLiteOpenHelper 帮助类,用于管理数据库创建和版本更新 onCreate(SQLiteDatabase db) onUpgrade(db,int old_ver,int new_ver) sqlite3 :位于 /tools,实例:Test_of_SQLite,DatabaseHelper 继承自 SQLiteOpenHelper 重写了onC
10、reate()、onUpgrade() 方法 实现 insert、del、query、close 等方法 ListView 显示记录,字段对应成 TextView ListView 的 onItemClick() 实现删除记录 数据库文件路径: /data/data/database/*.db,private SQLiteDatabase db;public void insert(ContentValues values)SQLiteDatabase db = getWritableDatabase();db.insert(TABLE_NAME, null, values);db.close
11、(); public void del(int id)if(db = null) db = getWritableDatabase();db.delete(TABLE_NAME, “_id=?“, new StringString.valueOf(id); public void onCreate(SQLiteDatabase db) this.db = db;db.execSQL(CREATE_TABLE); ,DatabaseHelper.java,DatabaseHelper dbHelper = new DatabaseHelper(this); Cursor cursor = dbH
12、elper.query(); String from = “_id“,“name“,“url“,“notes“; int to = R.id.textView1,R.id.textView2,R.id.textView3,R.id.textView4; SimpleCursorAdapter scadapter = new SimpleCursorAdapter (this,R.layout.favoritelist,cursor,from,to); ListView listView = getListView(); listView.setAdapter(scadapter); Alert
13、Dialog.Builder adBuilder = new AlertDialog.Builder(this);,Query_Test.java,listView.onItemClickadBuilder.setMessage(“确认删除?“).setPositiveButton(“Y“, new OnClickListener().setNegativeButton(“N“, new OnClickListener();AlertDialog aleraDialog = adBuilder.create();aleraDialog.show(); ,删除记录并重建 ListView,运行结
14、果:,4、Content Provider,与 Activity、Service、Broadcast Receiver 同属 Android 应用程序基本组件之一 用于保存和检索数据,实现了数据的跨应用共享 Android 中各应用均运行在自己的进程中,互相访问的 Content Provider 接口统一定义在 android.provider 包内,涵盖了常见的数据类型如音视频、图片、联系人等 实现的方法包括: insert、delete、qurey、update 等,URI Content Provider 用以实现数据共享的对象Content Resolver Content Prov
15、ider 的客户端接口 客户端通过 getContentResolver() 获得接口 提供与 Content Provider 对应的方法 间接地通过操作 Resolver 来操作 Provider 一个 Provider 可以对应多个 Resolver用户自定义系统 :Content Provider,实例:Test_of_ContentProvider,系统 Content Provider 添加联系人:,String name = editText1.getText().toString(); String notes = editText2.getText().toString();
16、 ContentResolver contentResolver1 = getContentResolver(); ContentValues contentValues1 = new ContentValues(); Uri uri1 = Contacts.People.CONTENT_URI; contentValues1.put(People.NAME,name); contentValues1.put(People.NOTES, notes); trycontentResolver1.insert(uri1, contentValues1);,运行结果:,7、Android 的多媒体应
17、用,on android,Android 的多媒体,Android 实现了常见媒体格式的编解码机制 图片:jpeg、gif、png、bmp 音频:3gp、mp3、wav 视频:3gp、mp4 Android 提供相应 API 实现多媒体应用 音视频播放:MediaPlayer、JetPlayer 音视频录制: MediaRecorder 媒体文件来源: 应用程序资源、本地文件、网络文件流,实例:ImageView,实例:GridView、Gallery,详见实例:Test_of_Widget,实例:Test_of_Mp3Player,实现 MediaPlayer.OnCompletionLis
18、tener 接口,public class Mp3Player_Test extends Activity implements MediaPlayer.OnCompletionListener/ 重写 onCompletion() 方法,实现循环播放 public void onCompletion(MediaPlayer mp) if(flag1=1)ib4play();if(flag2=1)ib8play(); / 重写 onDestroy() 方法 public void onDestroy()super.onDestroy();if(imageButton2.isEnabled()
19、ib2stop();if(imageButton6.isEnabled() ib6stop(); ,定义 MediaPlayer 对象并初始化,private MediaPlayer mp1,mp2;private void mp1init()try mp1=MediaPlayer.create(this, R.raw.temp);mp1.setOnCompletionListener(this);catch (Throwable t)errorReport(t); private void mp2init()try mp2 = new MediaPlayer();String path =
20、“/sdcard/graduated.mp3“;mp2.setDataSource(path);mp2.prepare();mp2.setOnCompletionListener(this);catch (Throwable t)errorReport(t); ,音乐文件路径:,定义三个 ImageButton 对象并实例化,实现 paly、pause 方法,private void ib4play()flag1=1;mediaPlayer1.start();imageButton2.setEnabled(true);imageButton3.setEnabled(true);imageBut
21、ton4.setEnabled(false); private void ib3pause()flag1=0;mediaPlayer1.pause();imageButton2.setEnabled(false);imageButton3.setEnabled(false);imageButton4.setEnabled(true); ,实现 stop 方法,private void ib2stop()flag1=0;mediaPlayer1.stop();imageButton2.setEnabled(false);imageButton3.setEnabled(false);trymedi
22、aPlayer1.prepare();mediaPlayer1.seekTo(0);imageButton4.setEnabled(true);catch(Throwable t)errorReport(t); ,运行结果:,Android AVD、SD Card,创建 AVD: Android SDK and AVD Manager AVD 的存放位置: C:Documents and SettingsAdministrator.androidavd AVD SD Card 及其容量的设定 AVD 的默认 Skin 与 Target 版本有关 AVD 的硬件参数设定: newDevice ram size:512M SDK_2.1_Update1_API_7.avdconfig.ini,SD Card 文件操作,先选定设备(Device) 然后打开 File Explorer:另有:adb 命令方式,8、应用实例:a、b、c、d,on android,Android 应用开发,a:Xeyeb:蓝牙短信收发c:兰大新闻网d:黑白棋游戏,thanks,