Android教程05-应用编程.ppt_第1页
Android教程05-应用编程.ppt_第2页
Android教程05-应用编程.ppt_第3页
Android教程05-应用编程.ppt_第4页
Android教程05-应用编程.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Android 课程讲义,Android智能手机开发,5、数据存取,Android智能手机开发,数据存取,Android有四种方式: SharePreference 轻量级键-值方式存储,以XML文件方式保存。 文件 采用java.io.*库所提供有I/O接口,读写文件。 SQLit数据库 SQLite是轻量级嵌入式内置数据库。 ContentProvider ContentProvider可为数据封装,为多个应用共享。,1、SharedPreferences,创建 以键值 方式加入数据 以 String Key 为索引来取出数据 清除,SharedPreferences settings =

2、 this.getSharedPreferences(Demo, MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit();,editor.putString(name, “value”); mit();,String str = settings.getString(name, );,editor.clear().commit();,XML文件名,SharedPreferences,存入XML后的内容 目录:/data/data/包/shared_prefs/*.xml,XML文件名,2、文件存取,文件用来存储大数量的数

3、据 采用java.io.*库所提供有I/O接口,读写文件。 只有本地文件可以被访问 优点:可以存储大容量的数据 缺点:文件更新或是格式改变可能会导致巨大的编程工作,文件操作(读),读文件 Context.openFileInput(String name)打开一个与应用程序联系的私有文件输入流 当文件不存在时抛出FileNotFoundException 异常,FileInputStream in = this.openFileInput(“rt.txt);/打开文件“rt.txt in.close();/关闭输入流,文件操作(写),写文件 Context.openFileOutput(Str

4、ing name,int mode)开启一个与应用程序联系的私有文件输出流 当文件不存在时该文件将被创建 文件输出流可以在添加模式中打开,这意味新的数据将被添加到文件的末尾,FileOutputStream out = this.openFileOutput(“wt.txt,MODE_APPEND); /打开文件“wt.txt进行写操作、使用MODE_APPEND 在添加模式中打开文件 out.close();/关闭输出流,读取静态文件,要打开打包在应用程序中的静态文件,使用Resources.openRawResource(R.raw.mydatafile) 该文件必须放在文件夹res/ra

5、w/中,InputStream in = this.getResources().openRawResource(R.raw.my); /获得Context资源 in.close();/关闭输入流,把文件存放在SDCard,访问SDCard,需要申请访问SDCard的权限。在AndroidManifest.xml中加入访问SDCard的权限如下:, ,SDCard读写,要进行SDCard读写,必须先判断手机是否装有SDCard,并且可以进行读写。,if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

6、 File sdCardDir = Environment.getExternalStorageDirectory();/获取SDCard目录 File saveFile = new File(sdCardDir, “itcast.txt”); FileOutputStream outStream = new FileOutputStream(saveFile); outStream.write(Android开发.getBytes(); outStream.close(); ,3、SQLite数据库编程,在某些情况下,文件不是有效的 如果多线程数据访问是相关的 如果应用程序处理可能变化的复杂

7、数据结构 等等 内置SQLite 数据库支持 数据库对于创建它们的包套件是私有的 数据库不应该用来存贮文件 SQLite 是一个轻量级的软件库 原子量性 坚固性 独立性 耐久性 体积大小只用几千字节 一些SQL 的指令只是部分支持,例如:ALTER、TABLE,SQLite数据库,Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。,SQLiteDatabase的execSQL()和rawQuery()方

8、法。 execSQL()方法:可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法:可以执行select语句。 execSQL()方法的使用例子:,SQLiteDatabase db = .; db.execSQL(insert into person(name, age) values(Android开发, 4); db.close();,创建数据库,Context.createDatabase(String name,int version ,int mode,CursorFactory factory)创建一个新

9、的数据库并返回SQLiteDatabase 对象 假如不能被创建,则抛出FileNotFoundException,SQLiteDatabase mydataBase=SQLiteDatabase.create(new CursorFactory()/创建一个数据库 /工厂类,当查询时调用来实例化一个光标 Override public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery, String editTable, SQLiteQuery query) / TODO Auto-generated met

10、hod stub return null; );,创建数据库,创建新的数据库,SQLiteDatabase myDataBase=this.openOrCreateDatabase(myDataBase.db, MODE_PRIVATE, new CursorFactory() /创建新的数据库,名称myDatabase,模式MODE_PRIVATE,光标工厂 /工厂类,一个可选工厂类,当查询时调用来实例化一个光标 Override public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery, String

11、 editTable, SQLiteQuery query) / TODO Auto-generated method stub return null; );,4、使用ContentProvider共享数据,当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。而使用ContentProvider共

12、享数据的好处是统一了数据访问方式。 第一步需要继承ContentProvider并重写下面方法:,public class PersonContentProvider extends ContentProvider public boolean onCreate() public Uri insert(Uri uri, ContentValues values) public int delete(Uri uri, String selection, String selectionArgs) public int update(Uri uri, ContentValues values, S

13、tring selection, String selectionArgs) public Cursor query(Uri uri, String projection, String selection, String selectionArgs, String sortOrder) public String getType(Uri uri),使用ContentProvider共享数据,第二步需要在AndroidManifest.xml使用对该ContentProvider进行配置,为了能让其他应用找到该ContentProvider , ContentProvider 采用了autho

14、rities(主机名/域名)对它进行唯一标识,可以把 ContentProvider看作是一个网站,authorities 就是网站域名:, ,Intent,Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。 与简单函数/方法调用,或者通过库调用接口的方式不太一样。在Intent的使用中你看不到直接的函数调用,相对函数调用来说,Intent是更为抽象的概念,利用Intent所实现的软件复用的粒度是Activity/Service,比函数复用更高一些,另外耦

15、合也更为松散。,广播sendBroadcast(),Intent之间传递数据 广播Intent通过调用发送信息 Context.sendBroadcast() Context.sendOrderedBroadcast() Context.sendStickyBroadcast() 通常一个广播Intent可以被订阅了此Intent的多个广播接收者所接收。,广播接收者BroadcastReceiver,第一步:继承BroadcastReceiver,并重写onReceive()方法。 第二步:订阅感兴趣的广播Intent: 方法一:使用代码 方法二:在AndroidManifest.xml文件中

16、的节点里进行订阅。,6、网络连接,Android智能手机开发,网络访问,使用网络,应该有相应使用允许。 文件AndroidManifest添加:, ,以Get请求从Internet获取数据,建立HttpClient,选择post或get请求服务器而获得网页数据。,HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(url); HttpResponse response = client.execute(get); HttpEntity entity = response.getEntity(); /尝试读

17、取entity的长度,返回-1表示长度未知 long length = entity.getContentLength(); InputStream is = entity.getContent();,从Internet获取数据,利用HttpURLConnection对象,我们可以从网络中获取网页数据。,URL url = new URL(); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(6* 1000);/设置连接超时 if (conn.getRespons

18、eCode() != 200) throw new RuntimeException(请求url失败); InputStream is = conn.getInputStream();/得到网络返回的输入流 String result = readData(is, GBK); conn.disconnect(); System.out.println(result);,从Internet获取数据,利用HttpURLConnection对象,我们可以从网络中获取文件数据。,URL url = new URL( HttpURLConnection conn = (HttpURLConnection

19、) url.openConnection(); conn.setConnectTimeout(6* 1000); if (conn.getResponseCode() != 200) throw new RuntimeException(请求url失败); InputStream is = conn.getInputStream(); readAsFile(is, ImgAndroid.jpg);,7、硬件访问,Android智能手机开发,Hardware APIs,电话 提供与电话有关的功能调用。 多媒体播放 音频、视频播放 相机 拍照与视频录像 可扩展硬件传感器 加速度仪与指南针APIs

20、控制方向与运动 通讯有关的程序库 蓝牙、网络、Wi-Fi等,音频采集,你可以使用手机进行现场录音,实现步骤如下: 第一步:在功能清单文件AndroidManifest.xml中添加音频刻录权限:,音频采集,第二步:编写音频刻录代码:,MediaRecorder recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC);/从麦克风采集声音 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);/内容输出格式 r

21、ecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);/音频编码方式 recorder.setOutputFile(/sdcard/itcast.amr); recorder.prepare();/预期准备 recorder.start(); /开始刻录 . recorder.stop();/停止刻录 recorder.reset(); /重设 recorder.release(); /刻录完成一定要释放资源,音乐播放,MediaPlayer mediaPlayer = new MediaPlayer(); if (mediaPl

22、ayer.isPlaying() mediaPlayer.reset();/重置为初始状态 mediaPlayer.setDataSource(/sdcard/god.mp3); mediaPlayer.prepare();/缓冲 mediaPlayer.start();/开始或恢复播放 mediaPlayer.pause();/暂停播放 mediaPlayer.start();/恢复播放 mediaPlayer.stop();/停止播放 mediaPlayer.release();/释放资源 mediaPlayer.setOnCompletionListener(new MediaPlaye

23、r.OnCompletionListener() /播出完毕事件 Override public void onCompletion(MediaPlayer arg0) mediaPlayer.release(); ); mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() / 错误处理事件 Override public boolean onError(MediaPlayer player, int arg1, int arg2) mediaPlayer.release(); return false; );,Cam

24、era相机,使用硬件,应该有相应允许。 文件AndroidManifest添加: Camera类通过调用 Camera.open() 返回Camera对象。,/打开摄像头,获得Camera对象 camera = Camera.open();,Camera,使用CameraPreview通过底层引擎更新画面。 调用Camera.release()释放资源,try /设置显示 camera.setPreviewDisplay(holder); catch (IOException exception) camera.release();/释放资源 camera = null; ,拍摄照片takeP

25、icture,第一个参数:在图像被捕获时回调,通常通过音效表明拍摄成功。 第二个参数:图片原始数据通过byte传入回调方法。可以忽略。 第三个参数:生成JPEG格式图片数据时被调用,JPEG数据通过byte传入回调方法。,/拍摄照片 camera.takePicture(shutterCallback, null, jpegCallback);,JPEG格式数据处理,将图片存盘save(),并通过发送Intent启动内置程序显示图片。,/返回照片的JPEG格式的数据 private PictureCallback jpegCallback = new PictureCallback() pub

26、lic void onPictureTaken(byte data, Camera camera) Parameters ps = camera.getParameters(); if(ps.getPictureFormat() = PixelFormat.JPEG) /存储拍照获得的图片 String path = save(data); /将图片交给Image程序处理 Uri uri = Uri.fromFile(new File(path); Intent intent = new Intent(); intent.setAction(ent.action.VIEW

27、); intent.setDataAndType(uri, image/jpeg); startActivity(intent); ;,浙江大学计算机学院,保存图像,private String save(byte data) String path = /sdcard/+System.currentTimeMillis()+.jpg; try /判断SD卡上是否有足够的空间 String storage = Environment.getExternalStorageDirectory().toString(); StatFs fs = new StatFs(storage); long a

28、vailable = fs.getAvailableBlocks()*fs.getBlockSize(); if(availabledata.length) return null; /空间不足直接返回空 File file = new File(path); if(!file.exists()file.createNewFile(); /创建文件 FileOutputStream fos = new FileOutputStream(file); fos.write(data); fos.close(); catch (Exception e) e.printStackTrace(); re

29、turn null; return path; ,LocationManager,LocationProvider类 GPS:使用GPS模块定位 AGPS:使用移动电话网络蜂窝技术定位,locationManager= (LocationManager)getSystemService(Context.LOCATION_SERVICE); List providers= locationManager.getAllProviders(); for(String p:providers) /处理Provider ,查询最佳LocationProvider,Criteria类 选择最佳电源、精确度

30、、方位、速度、高度,Private String findProvider() Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_COARSE); criteria.setPowerRequirement(Criteria.POWER_LOW); criteria.setAlititudeRequired(false);/ criteria.setBearingRequired(false);/ criteria.setSpeedRequired(false);/速度 criteria.setC

31、ostAllowed(true);/ return locationManager.getBestProvider(criteria, ture); ,获取位置信息,getLastKnownLocation() 获得设备记录的最后位置 requestLocationUpdate(String provider, long minTime, float minDistance, LocationListener listener) minTime:回调时间间隔 float minDistance:回调距离间隔,locationManager.requestLocationUpdate(locationManager.AGPS_PROVIDER,60000, 10, new LocationListener() public void onLocationChanged(Location location) /更新位置 ,位置警报,addProximityAlert(double latitude, double longitude, float radius, long expiration, PendingIntent intent) radius:警报半径 expiration:警报时间,-1则永不过期 i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论