Android课程讲义_第1页
Android课程讲义_第2页
Android课程讲义_第3页
Android课程讲义_第4页
Android课程讲义_第5页
已阅读5页,还剩42页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、Android 课程讲义课程讲义吴明晖吴明晖浙江大学城市学院计算机系浙江大学城市学院计算机系5、数据存取、数据存取智能手机开发智能手机开发浙江大学计算机学院数据存取数据存取nAndroid有四种方式:qSharePreferencen轻量级键-值方式存储,以XML文件方式保存。q文件n采用java.io.*库所提供有I/O接口,读写文件。qSQLit数据库nSQLite是轻量级嵌入式内置数据库。qContentProvidernContentProvider可为数据封装,为多个应用共享。浙江大学计算机学院1、SharedPreferencesn创建n以键值 方式加入数据n以 String Ke

2、y 为索引来取出数据n清除SharedPreferences settings= this.getSharedPreferences(Demo, MODE_PRIVATE);SharedPreferences.Editor editor = settings.edit();editor.putString(name, “value”);mit();String str = settings.getString(name, );editor.clear().commit();XML文件名浙江大学计算机学院SharedPreferencesn存入XML后的内容q目录:/data/data/包/sh

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

4、文件“rt.txtin.close();/关闭输入流浙江大学计算机学院文件操作文件操作(写写)n写文件qContext.openFileOutput(String name,int mode)开启一个与应用程序联系的私有文件输出流q当文件不存在时该文件将被创建q文件输出流可以在添加模式中打开,这意味新的数据将被添加到文件的末尾FileOutputStream out = this.openFileOutput(“wt.txt,MODE_APPEND);/打开文件“wt.txt进行写操作、使用MODE_APPEND 在添加模式中打开文件out.close();/关闭输出流浙江大学计算机学院读取静

5、态文件读取静态文件n要打开打包在应用程序中的静态文件,使用Resources.openRawResource(R.raw.mydatafile)n该文件必须放在文件夹res/raw/中InputStream in = this.getResources().openRawResource(R.raw.my);/获得Context资源in.close();/关闭输入流浙江大学计算机学院把文件存放在把文件存放在SDCardn访问SDCard,需要申请访问SDCard的权限。在AndroidManifest.xml中加入访问SDCard的权限如下:浙江大学计算机学院SDCard读写读写n要进行SDC

6、ard读写,必须先判断手机是否装有SDCard,并且可以进行读写。if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) File sdCardDir = Environment.getExternalStorageDirectory();/获取SDCard目录 File saveFile = new File(sdCardDir, “itcast.txt”);FileOutputStream outStream = new FileOutputStream(saveFile);outStream.w

7、rite(Android开发.getBytes();outStream.close();浙江大学计算机学院3、SQLite数据库编程数据库编程n在某些情况下,文件不是有效的q如果多线程数据访问是相关的q如果应用程序处理可能变化的复杂数据结构q等等n内置SQLite 数据库支持q数据库对于创建它们的包套件是私有的q数据库不应该用来存贮文件nSQLite 是一个轻量级的软件库q原子量性q坚固性q独立性q耐久性q体积大小只用几千字节q一些SQL 的指令只是部分支持,例如:ALTER、TABLE浙江大学计算机学院SQLite数据库数据库nAndroid提供了一个名为SQLiteDatabase的类,该

8、类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。浙江大学计算机学院nSQLiteDatabase的execSQL()和rawQuery()方法。qexecSQL()方法:可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句;qrawQuery()方法:可以执行select语句。nexecSQL()方法的使用例子:SQLiteDatabase db = .;db.execSQL(insert into person(n

9、ame, age) values(Android开发, 4);db.close();浙江大学计算机学院创建数据库创建数据库nContext.createDatabase(String name,int version ,int mode,CursorFactory factory)创建一个新的数据库并返回SQLiteDatabase 对象q假如不能被创建,则抛出FileNotFoundExceptionSQLiteDatabase mydataBase=SQLiteDatabase.create(new CursorFactory()/创建一个数据库/工厂类,当查询时调用来实例化一个光标Ove

10、rridepublic Cursor newCursor(SQLiteDatabase db,SQLiteCursorDriver masterQuery, String editTable,SQLiteQuery query) / TODO Auto-generated method stubreturn null;);浙江大学计算机学院创建数据库创建数据库n创建新的数据库SQLiteDatabase myDataBase=this.openOrCreateDatabase(myDataBase.db,MODE_PRIVATE, new CursorFactory()/创建新的数据库,名称m

11、yDatabase,模式MODE_PRIVATE,光标工厂/工厂类,一个可选工厂类,当查询时调用来实例化一个光标Overridepublic Cursor newCursor(SQLiteDatabase db,SQLiteCursorDriver masterQuery, String editTable,SQLiteQuery query) / TODO Auto-generated method stubreturn null;);浙江大学计算机学院4、使用、使用ContentProvider共享数据共享数据n当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的

12、方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。n第一步需要继承ContentProvider并重写下面方法:public class PersonContentProvider extends ContentProvider public boolean onCreate() public Uri

13、insert(Uri uri, ContentValues values) public int delete(Uri uri, String selection, String selectionArgs) public int update(Uri uri, ContentValues values, String selection, String selectionArgs) public Cursor query(Uri uri, String projection, String selection, String selectionArgs, String sortOrder)

14、public String getType(Uri uri)浙江大学计算机学院使用使用ContentProvider共享数据共享数据n第二步需要在AndroidManifest.xml使用对该ContentProvider进行配置,为了能让其他应用找到该ContentProvider , ContentProvider 采用了authorities(主机名/域名)对它进行唯一标识,可以把 ContentProvider看作是一个网站,authorities 就是网站域名: 浙江大学计算机学院IntentnAndroid中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,I

15、ntent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。n与简单函数/方法调用,或者通过库调用接口的方式不太一样。在Intent的使用中你看不到直接的函数调用,相对函数调用来说,Intent是更为抽象的概念,利用Intent所实现的软件复用的粒度是Activity/Service,比函数复用更高一些,另外耦合也更为松散。浙江大学计算机学院广播广播sendBroadcast()nIntent之间传递数据n广播Intent通过调用发送信息qContext.sendBroadcast()qContext.sendOrderedBroadcast()qCon

16、text.sendStickyBroadcast()n通常一个广播Intent可以被订阅了此Intent的多个广播接收者所接收。浙江大学计算机学院广播接收者广播接收者BroadcastReceivern第一步:继承BroadcastReceiver,并重写onReceive()方法。n第二步:订阅感兴趣的广播Intent:q方法一:使用代码q方法二:在AndroidManifest.xml文件中的节点里进行订阅。6、网络连接、网络连接智能手机开发智能手机开发浙江大学计算机学院网络访问网络访问n使用网络,应该有相应使用允许。q文件AndroidManifest添加:浙江大学计算机学院以以Get请

17、求从请求从Internet获取数据获取数据n建立HttpClient,选择post或get请求服务器而获得网页数据。HttpClient client = new DefaultHttpClient();HttpGet get = new HttpGet(url);HttpResponse response = client.execute(get);HttpEntity entity = response.getEntity();/尝试读取entity的长度,返回-1表示长度未知long length = entity.getContentLength();InputStream is =

18、entity.getContent();浙江大学计算机学院从从Internet获取数据获取数据n利用HttpURLConnection对象,我们可以从网络中获取网页数据。URL url = new URL(http:/);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(6* 1000);/设置连接超时if (conn.getResponseCode() != 200) throw new RuntimeException(请求url失败);InputStream i

19、s = conn.getInputStream();/得到网络返回的输入流String result = readData(is, GBK);conn.disconnect();System.out.println(result);浙江大学计算机学院从从Internet获取数据获取数据 利用HttpURLConnection对象,我们可以从网络中获取文件数据。URL url = new URL(http:/ conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(6* 1000);if (conn.getRe

20、sponseCode() != 200) throw new RuntimeException(请求url失败);InputStream is = conn.getInputStream();readAsFile(is, ImgAndroid.jpg); 7、硬件访问、硬件访问智能手机开发智能手机开发浙江大学计算机学院Hardware APIsn电话q提供与电话有关的功能调用。n多媒体播放q音频、视频播放n相机q拍照与视频录像n可扩展硬件传感器n加速度仪与指南针APIsq控制方向与运动n通讯有关的程序库q蓝牙、网络、Wi-Fi等浙江大学计算机学院音频采集音频采集n你可以使用手机进行现场录音,实

21、现步骤如下:q第一步:在功能清单文件AndroidManifest.xml中添加音频刻录权限:浙江大学计算机学院音频采集音频采集q第二步:编写音频刻录代码:MediaRecorder recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC);/从麦克风采集声音 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);/内容输出格式 recorder.setAudioEncoder(MediaRecorder.A

22、udioEncoder.AMR_NB);/音频编码方式 recorder.setOutputFile(/sdcard/itcast.amr); recorder.prepare();/预期准备 recorder.start(); /开始刻录 . recorder.stop();/停止刻录 recorder.reset(); /重设 recorder.release(); /刻录完成一定要释放资源浙江大学计算机学院音乐播放音乐播放MediaPlayer mediaPlayer = new MediaPlayer();if (mediaPlayer.isPlaying() mediaPlayer.

23、reset();/重置为初始状态mediaPlayer.setDataSource(/sdcard/god.mp3);mediaPlayer.prepare();/缓冲mediaPlayer.start();/开始或恢复播放mediaPlayer.pause();/暂停播放mediaPlayer.start();/恢复播放mediaPlayer.stop();/停止播放mediaPlayer.release();/释放资源mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() /播出完毕事件 Over

24、ride 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; );浙江大学计算机学院Camera相机相机n使用硬件,应该有相应允许。q文件Android

25、Manifest添加:nCamera类通过调用 Camera.open() 返回Camera对象。/打开摄像头,获得Camera对象camera = Camera.open(); 浙江大学计算机学院Cameran使用CameraPreview通过底层引擎更新画面。n调用Camera.release()释放资源try /设置显示camera.setPreviewDisplay(holder); catch (IOException exception) camera.release();/释放资源camera = null;浙江大学计算机学院拍摄照片拍摄照片takePicturen第一个参数:在

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

27、oid 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); int

28、ent.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 available = f

29、s.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();return null;return pat

30、h;浙江大学计算机学院LocationManagernLocationProvider类qGPS:使用GPS模块定位qAGPS:使用移动电话网络蜂窝技术定位 locationManager= (LocationManager)getSystemService(Context.LOCATION_SERVICE);List providers= locationManager.getAllProviders();for(String p:providers)/处理Provider浙江大学计算机学院查询最佳查询最佳LocationProvidernCriteria类q选择最佳电源、精确度、方位、速度

31、、高度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.setCostAllowed(tr

32、ue);/return locationManager.getBestProvider(criteria, ture);浙江大学计算机学院获取位置信息获取位置信息ngetLastKnownLocation()q获得设备记录的最后位置nrequestLocationUpdate(String provider, long minTime, float minDistance, LocationListener listener)qminTime:回调时间间隔qfloat minDistance:回调距离间隔locationManager.requestLocationUpdate(locationManager.AGPS_PROVIDER,60000, 10, new LocationListener()public void onLocationChanged(Location location)/更新位置浙江大学计算机学院位置警报位置警报naddProximityAlert(double latitude, double longitude, float radius, long expiration, PendingIntent intent)qradius:警报半径qexpiration:警报时间,-1则永不过期qintent:由警报触发,

温馨提示

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

评论

0/150

提交评论