版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2页《Android应fg用开发》实验指导书桂林电子科技大学计算机科学与工程学院2013.9
目录实验一:搭建Android平台和创建HelloWorld 1一、实验目的 .二、实验要求 .三、实验内容 .1、安装并配置JavaJDK .2、安装MyEclipse或Eclipse .3、安装AndroidSDK .4、安装ADT(AndroidDevelopmentTools) .5、创建Android虚拟设备(AVD) .6、建立新项目HelloWorld .实验二:UI设计 8一、实验目的 .二、实验要求 .三、实验内容 .1、常用控件 .2、界面布局 .3、事情处理 .实验三:Intent、Activity应用 16一、实验目的 .二、实验要求 .三、实验步骤 .1、创建项目 .2、添加布局文件 .3、创建Activity .4.修改AndroidManifest.xml文件 .实验四:service应用 22一、实验目的 .二、实验要求 .三、实验步骤 .1、创建项目 .2、布局文件 .3、修改AndroidManifest.xml文件 .实验五:SQLite和SQLiteDatabase应用 27一、实验目的 .二、实验要求 .1、创建项目 .2、布局文件 .3、创建Activity .实验六:图形绘制与OpenGLES 38一、实验目的 .二、实验要求 .三、实验过程 .1、绘制直线、园、曲线等各种图形 .2、显示字符 .3、利用OpenGLES方法编程 .实验七:网络访问与服务 45一、实验目的 .二、实验要求 .三、实验内容 .1、访问WEB网站,通过HttpResponse类,读入网络数据 .实验八:硬件访问与传感器 53一、实验目的 .二、实验要求 .三、实验步骤 .1、了解程序使用手机电话功能的方法,实现短信收发 .2、对手机上传感器进行编程,实现相机拍摄 .实验一:搭建Android平台和创建HelloWorld实验目的本次实验的目的是让大家熟悉搭建智能手机开发平台的过程,了解Andorid开发项目的基本文件目录结构,并实现HelloWorld小例程。实验要求完成Android开发平台的搭建及相关配置创建项目并熟悉文件目录结构实现例程HelloWorld实验内容一、安装并配置JavaJDK下载安装JDK,如安装目录为:C:\ProgramFiles(x86)\Java\jdk1.6.0_18。配置JDK:XP:右键“我的电脑”“属性”“高级”“环境变量”WIN7:右键“我的电脑”“高级系统设置”“环境变量”新建系统变量:JAVA_HOME,C:\ProgramFiles(x86)\Java\jdk1.6.0_18(JDK安装目录)。PATH,%JAVA_HOME%\bin;%JAVA_HOME%\jr\bin。CLASSPATH,.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(前面的.;一定要加上)配置完成后在CMD中输入java–version和javac–version,能看到对应的JDK版本即配置成功,如下图所示。二、安装MyEclipse或Eclipse 安装平台。三、安装AndroidSDK下载AndroidSDK地址:/android/android-sdk_r05-windows.zip。注意SDK的版本为r05,对应的ADT版本应为10.0.0,SDK和ADT需要对应才能正常运行程序。安装SDK安装过程可能碰到的问题1:弹出窗口“Failedtofetchurl…”需要如下设置:关闭该窗口点击“cancel”在左侧选择“Settings”选中“Forcehttps://...”点击“SaveandApply”重新运行安装文件。安装过程可能碰到的问题2:弹出窗口“afolderfailedtoberenamedormoved”需要如下设置:将文件夹“android-sdk-windows”下的“tools”复制粘贴。打开文件夹“tools-复制”运行“android.bat”再次运行安装文件。进入安装过程后,选择“AcceptAll”,点击“Install”,如下图所示。安装完成后可以看到如下图所示的列表。配置SDK同配置JDK一样配置SDK,将SDK的根目录\tools(如:C:\Users\33\Desktop\android-sdk-windows\tools)加入到系统变量PATH中。配置完成后在CMD中运行android,能看到一系列信息并打开了SDKManager即说明SDK配置成功,如下图所示。四、安装ADT(AndroidDevelopmentTools)下载ADT地址:/android/ADT-10.0.0.zip。安装ADT解压下载的ADT包。打开MyEclipse或Eclipse。安装。MyEclipse:点击“Help”“SoftwareUpdates”“FindandInstall…”“Searchfornewfeaturestoinstall”点击“NewLocalSite”选择解压后的ADT包,然后按照提示安装即可。Eclipse:“Help”“InsatllNewSoftware…”“Add…”在Name中输入“ADT”,Location中选择解压的包,然后按照提示安装即可。配置ADT在MyEclipse或Eclipse中:“Window”“Preferences”“Android”在“SDKLocation”项选择SDK根目录。配置过程可能出现的问题:“Cannotfind…/tools/adb.exe!”,这是因为tools目录下的adb.exe被移动到了platform-tools下了,从文件夹“platform-tools”中将adb.exe、AdbWinApi.dll和AdbWinUsbApi.dll三个文件拷贝至文件夹“tools”下即可。五、创建Android虚拟设备(AVD)打开SDKManager点击“VirtualDevice”点击“New”如下图所示设置,Target选择Android2.2,Size是SD卡的大小(可自行调整)创建完AVD后选择该AVD并点击“Start”即可运行该AVD,AVD的启动过程很慢,耐心等待,运行成功如下图所示。六、建立新项目HelloWorld打开MyEclipse或Eclipse。点击“File”“New”“Project”“AndroidProject”,创建HelloWorld项目,如下几个地方需要进行设置。项目名:HelloWorld 勾选“Android2.2” 设置属性:项目目录结构如下图所示,能看到已经建立好了Class:HelloWorld.java,接下来对其进行修改。按照下图修改HelloWorld.java的内容,大家自己敲一敲熟悉一下。选择项目HelloWorld并点击“RunAs”“OpenRunDialog”,用之前创建的AVD运行项目,运行结果如下图所示,到此为止HelloWorld项目就实现了。实验二:UI设计实验目的本次实验的目的是让大家熟悉Android开发中的UI设计,包括了解和熟悉常用控件的使用、界面布局和事件处理等内容。实验要求熟悉和掌握界面控件设计了解Android界面布局掌握控件的事件处理实验内容一、常用控件1.常用控件介绍Android中有许多常用控件(简单分类):文本框:TextView、EditText按钮:Button、RadioButton、RadioGroup、CheckBox、ImageButton列表:List、ExpandableListView、Spinner、AutoCompleteTextView、GridView、ImageView进度条:ProgressBar、ProgressDialog、SeekBar、RatingBar选择器:DatePicker、TimePicker菜单:Menu、ContentMenu对话框:Dialog、ProgressDialog常用的控件有文本框、按钮和列表等。2.控件的实现在上一个实验中,我们用TextView实现了在界面显示一句“HelloTheAndroidWorld!”。publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState); TextViewtextView=newTextView(this); textView.setText("HelloTheAndroidWorld!"); setContentView(textView);}现在我们来看一看.xml文件和编码的相互关系。在HelloWorld.java中敲入如下代码:packagetju.scs.android.test;importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.Button;importandroid.widget.TextView;publicclassHelloWorldextendsActivity{/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);TextViewtextView=(TextView)findViewById(R.id.textView01);Buttonbutton=(Button)findViewById(R.id.button01); }}注意在上面并没有为textView和button设置文本内容等,另外textView的初始化代码为:TextViewtextView=(TextView)findViewById(R.id.textView01); 此处初始化用到了id为textView01的TextView。 在项目目录中找到/res/layout/main.xml,如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView android:id="@+id/textView01" android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"/><Button android:id="@+id/button01" android:layout_width="fill_parent" android:layout_height="wrap_content"android:text="@string/button" /></LinearLayout> 注意上面列出了两个控件:TextView和Button,id分别为textView01和button01,它们的文本内容分别为@string/hello和@string/button。 在项目目录中找到/res/values/strings.xml,如下:<?xmlversion="1.0"encoding="utf-8"?><resources><stringname="hello">HelloTheAndroidWorld!</string><stringname="button">Iamabutton!</string><stringname="app_name">HelloWorld</string></resources> 可以看到两个string:hello和button的内容分别为“HelloTheAndroidWorld!”和“Iamabutton!”,即使文本框和按钮在界面上显示的内容,如下图所示:3.控件的属性 可以直接在类中为控件设置属性,也可以在xml文件中设置属性。每个控件都有一系列的属性,例如id、size、text、color等等,大家可以找找API查看控件的属性。二、界面布局 Android中有很多布局:FrameLayout:最简单的一个布局对象。它里面只显示一个显示对象。Android屏幕元素中所有的显示对象都将会固定在屏幕的左上角,不能指定位置。但允许有多个显示对象,但后一个将会直接在前一个之上进行覆盖显示,把前一个部份或全部挡住(除非后一个是透明的)。LinearLayout:以单一方向对其中的显示对象进行排列显示,如以垂直排列显示,则布局管理器中将只有一列;如以水平排列显示,则布局管理器中将只有一行。同时,它还可以对个别的显示对象设置显示比例。TableLayout:以拥有任意行列的表格对显示对象进行布局,每个显示对象被分配到各自的单元格之中,但单元格的边框线不可见。AbsoluteLayout:允许以坐标的方式,指定显示对象的具体位置,左上角的坐标为(0,0),向下及向右,坐标值变大。这种布局管理器由于显示对象的位置定死了,所以在不同的设备上,有可能会出现最终的显示效果不一致。RelativeLayout:允许通过指定显示对象相对于其它显示对象或父级对象的相对位置来布局。如一个按钮可以放于另一个按钮的右边,或者可以放在布局管理器的中央。布局中可以放置控件,而每个布局又可以嵌套其他布局,这种思想和之前学习java的布局是一样的。例如在main.xml中如下布局:在一个LinearLayout布局下嵌套了两个LinearLayout,出来的效果如下图所示: 其他布局请大家自行尝试。三、事情处理 事件监听和时间处理的概念大家以前都学习过,android中主要有如下事件方法:onClick(Viewv)一个普通的点击按钮事件booleanonKeyMultiple(intkeyCode,intrepeatCount,KeyEventevent)用于在多个事件连续时发生,用于按键重复booleanonKeyDown(intkeyCode,KeyEventevent)用于在按键进行按下时发生booleanonKeyUp(intkeyCode,KeyEventevent)用于在按键进行释放时发生onTouchEvent(MotionEventevent)触摸屏事件,当在触摸屏上有动作时发生booleanonKeyLongPress(intkeyCode,KeyEventevent)当长时间按时发生下面以点击一个Button为例子:packagetju.scs.android.test;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.TextView;importandroid.widget.Toast;publicclassHelloWorldextendsActivity{/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Buttonbutton=(Button)findViewById(R.id.button01);button.setOnClickListener(buttonListener); }privateOnClickListenerbuttonListener=newOnClickListener(){ publicvoidonClick(Viewv){ Toast.makeText(v.getContext(),"Youhaveclickedabutton!",Toast.LENGTH_LONG).show(); } };} 为button添加了一个监听buttonListener,对应的onClick方法则抛出了一则文本框提示用户,效果图如下所示: 其他事件处理请大家自行尝试。实验三:Intent、Activity应用一、实验目的本次实验的目的是让大家熟悉Intent和Activity的使用。Intent的最常用的用途是绑定应用程序组件。Intent用来在应用程序Activity间启动、停止和传输。并实现添加用户名,密码小例程。二、实验要求完成Android开发平台的搭建及相关配置创建项目并熟悉文件目录结构实现例程添加用户名,密码实验步骤三、实验步骤项目界面:添加用户名,密码,在另一页面显示用户名。1、创建项目新建一个Android工程命名为test1,目录结构如下图:2、添加布局文件修改main.xml布局文件(这里增加了两个TextView,两个EditView,一个按钮),如下图 新建test2.xml布局文件(这里增加了两个TextView),这个页面是用来显示添加的用户名,如下图:3、创建Activity修改test1.java,并且新建一个Activity,一个是test2.java。,代码分别如下:Test1.java作用:获得页面输入的内容,存储并跳转到test2.xml。Test2.java作用:从Intent中获得需要显示name的值,并给TextView赋值。4.修改AndroidManifest.xml文件比较重要的一步啦,修改AndroidManifest.xml文件(将新增的Activity,test2)注册一下,代码如下(第16行):实验四:service应用一、实验目的本次实验的目的是让大家熟悉service的使用。一个使用Service的典型的例子是,用户一边在手机做其他的事情,一边听手机上的音乐。其中,在后台播放音乐就可以使用Service来实现。并实现简单播放器的小例程。二、实验要求创建项目并熟悉文件目录结构。实现例程简单播放器。三、实验步骤项目界面:1、创建项目新建一个Android工程命名为test1,目录结构如下图:2、布局文件修改main.Xml文件修改MusciPlayer.java文件,新建MusicService.java文件,代码如下图:MusciPlayer.java文件MusicService.java3、修改AndroidManifest.xml文件比较重要的一步啦,修改AndroidManifest.xml文件(将新增的service)注册一下,代码如下(第16行):实验五:SQLite和SQLiteDatabase应用一、实验目的1、本次实验的目的是让大家熟悉Android中对数据库进行操作的相关的接口、类等。SQLiteDatabase这个是在android中数据库操作使用最频繁的一个类。通过它可以实现数据库的创建或打开、创建表、插入数据、删除数据、查询数据、修改数据等操作。2、实现添加用户名,爱好小例程。二、实验要求1、完成Android开发平台的搭建及相关配置2、创建项目并熟悉文件目录结构3、实现例程添加用户名,爱好实验步骤三、实验步骤项目界面:输入用户名,爱好添加到数据库,由数据库查询出来显示插入的列表。当单击列表时会弹出Alert询问是否删除,进行删除操作。1、创建项目新建一个Android工程命名为Database,目录结构如下图:2、布局文件修改main.xml布局文件,添加display.xml文件,用来显示列表。如下图Main.XmlDisplay.xml3、创建Activity修改DatabaseActivity.java文件,新建DBHelper.java文件和displayAvtivity.java,代码如下图:DBHelper.java操作数据库的工具类,该类继承SQLiteOpenHelper。DatabaseActivity.java获取页面输入的值,添加到数据库displayAvtivity.java显示列表,删除数据实验六图形绘制与OpenGLES【实验目的】在屏幕绘制各种图形,了解OpenGL【实验要求】了解在屏幕绘图方法了解OpenGL【实验原理】【实验过程】绘制直线、园、曲线等各种图形显示字符利用OpenGLES方法编程Android中的图形系统采用Client/Server架构。Server(即SurfaceFlinger)主要由c++代码编写而成。Client端代码分为两部分,一部分是由Java提供的供应用使用的api,另一部分则是由c++写成的底层实现。Android图形系统中通过surface为view创建一个Canvas对象,管理view在surface上的绘图操作。View及其子类(如TextView,Button)要画在surface上。OpenGLES(OpenGLforEmbeddedSystems)是一个针对嵌入式应用的,免费的,支持全功能2D、3D的跨平台API(OpenGL®ESisaroyalty-free,cross-platformAPIforfull-function2Dand3Dgraphicsonembeddedsystems-includingconsoles,phones,appliancesandvehicles)。目前主要由3个版本,1.0,1.1,2.0。OpenGLES1.0是以OpenGL1.3规范为基础的,OpenGLES1.1是以OpenGL1.5规范为基础的,1.1完全兼容1.0。OpenGLES2.0则是参照OpenGL2.0规范定义的。简单的来说,OpenGLES是OpenGL针对嵌入式应用的简化版,也就是android使用的标准。OpenGLES1.1强调api的硬件加速,OpenGLES2.0更强调3D能力。OpenGLES1.1和OpenGLES2.0之间的关系并不是旧版本和新版本之间的差别,而是一个针对相对低端的应用,一个针对高级应用,OpenGL官方的roadmap也是将这两个版本并行发展的。2.X并不能百分百兼容1.X。Android现在支持1.X和2.X。OpenGLES是专为内嵌和移动设备设计的一个2D/3D轻量级图形库,它基于OpenGLAPI设计,是OpenGL三维图形API的子集。Android里有三个与OpenGL有关的包: android.opengl javax.microedition.khronos.egl javax.microedition.khronos.opengles publicvoidonDrawFrame(GL10gl){ //一般的opengl程序,首先要做的就是清屏 gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT); //紧接着设置模型视图矩阵 gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity();//清空矩阵 GLU.gluLookAt(gl,0,0,3,0,0,0,0,1,0);//视点变换,将相机位置设置为(0,0,3),同时指向(0,0,0)点 //设置模型位置旋转及缩放信息 gl.glTranslatef(0.0f,0.0f,-1.0f);//将模型位置设置为(0,0,-1) floatangle=30.0f; gl.glRotatef(angle,0,1,0);//绕模型自身Y轴旋转30度 gl.glRotatef(angle,1,0,0);//绕模型自身X轴旋转30度 gl.glScalef(1.2f,1.2f,1.2f);//设置三方向的缩放系数 //设置颜色gl.glColor4f(0.0f,0.0f,0.0f,1.0f);//渲染立方体 mCube.draw(gl,gl.GL_TRIANGLES);//mCube.draw(gl,gl.GL_LINES); }
实验七网络访问与服务【实验目的】掌握Android网络访问方法【实验要求】了解手机WEB网站访问编程通过网络进行数据访问了解数据库使用【实验原理】利用Android网络访问协议【实验过程】访问WEB网站,通过HttpResponse类,读入网络数据。AndroidSDK网络包:包描述Android网络访问socket。该包包括URI类,不仅仅是传统的联网方面。.http处理Android有关Http协议类。.wifi在Android平台上管理有关WiFi(802.11无线Ethernet)应用的类。android.telephony.gsm包含用于管理和发送SMS(文本)消息的类。读入WEB数据例程: HttpClientclient=newDefaultHttpClient(); HttpGetget=newHttpGet(url); HttpResponseresponse=client.execute(get); HttpEntityentity=response.getEntity(); //尝试读取entity的长度,返回-1表示长度未知 longlength=entity.getContentLength(); InputStreamis=entity.getContent(); Strings=null; if(is!=null){ ByteArrayOutputStreambaos=newByteArrayOutputStream(); byte[]buf=newbyte[512]; intch=-1; intcount=0; while((ch=is.read(buf))!=-1){ baos.write(buf,0,ch); count+=ch; //如果长度已知,可以通过taskProgress()通知监听者任务执行的比例 if(length>0){ listener.taskProgress(this,count,length); } //为了更好的演示进度,让线程休眠100ms Thread.sleep(100); } Log.e("HttpTask","length="+baos.toByteArray().length); //返回内容 s=newString(baos.toByteArray()); } returns;读入网站数据:
实验八硬件访问与传感器【实验目的】通过底层API访问手机硬件及手机上的各种传感器【实验要求】获取手机上电话、短信等各种功能的编程了解手机上各种传感器的功能与使用方法【实验原理】利用手机本身的功能与相关传感器的使用【实验过程】了解程序使用手机电话功能的方法短信收发:◆发送短信只需要几行代码,如下:SmsManagersms=SmsManager.getDefault();PendingIntentpi=PendingIntent.getBroadcast(this,0,newIntent(),0);sms.sendTextMessage(phoneNumber,null,MsgStr,pi,null);其中参数phoneNumber和MsgStr均是String类型,表示接收方的电话号码和短信内容◆接收短信主要是继承BroadcaseReceiver类,覆盖onReceive函数:packagecom.android.TinySMS;importandroid.app.Activity;importandroid.app.PendingIntent;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.os.Bundle;importandroid.telephony.gsm.SmsManager;importandroid.view.View;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.Toast;publicclassTinySMSextendsActivity{publicstaticfinalStringSMS_ACTION="com.android.TinySMS.RESULT";// privateTextView message;privateButton snd;privateEditText tel;privateEditText txt;privateSentReceiverreceiver=newSentReceiver();privateclassSentReceiverextendsBroadcastReceiver{ @Override publicvoidonReceive(Contextcontext,Intentintent){ if(intent.getAction().equals(SMS_ACTION)){ intcode=getResultCode(); //短消息发送成功 if(code==Activity.RESULT_OK) Toast.makeText(TinySMS.this,R.string.msg_sent, Toast.LENGTH_SHORT).show(); } }};/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main); tel=(EditText)findViewById(R.id.EditText01); tel.setText("5554");//模拟器之间互发短信 txt=(EditText)findViewById(R.id.EditText02); txt.setText("我用自己的程序试试发短信。"); snd=(Button)findViewById(R.id.Button01); snd.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewarg0){ StringphoneNo=tel.getText().toString(); Stringmessage=txt.getText().toString(); if(phoneNo.length()>0&&message.length()>0){ sendSMS(phoneNo,message); }else{ Toast.makeText(TinySMS.this, "请重新输入电话号码和短信内容", Toast.LENGTH_LONG).show(); } } });}privatevoidsendSMS(Stringaddress,Stringcontent){ SmsManagermanager=SmsManager.getDefault(); Intenti=newIntent(SMS_ACTION); //生成PendingIntent,当消息发送完成,接收到广播 PendingIntentsentIntent=PendingIntent.getBroadcast( this, 0, i, PendingIntent.FLAG_ONE_SHOT); manager.sendTextMessage( address, null, content, sentIntent, null);}}如果要收发短信,还需在AndroidManifest.xml中声明权限:<uses-permissionandroid:name="android.permission.READ_SMS"></uses-permission><uses-permissionandroid:name="android.permission.SEND_SMS"></uses-permission>手机上有多种传感器,可以对这些传感器进行编程。AndroidSDK中提供的面向硬件的特性特性描述android.hardware.Camera相机交互的类,可以截取照片、获取预览屏幕的图像,修改理相机操作的参数。android.hardware.SensorManager允许访问Android平台传感器的类。并非所有配备Android的设备都支持SensorManager中的所有传感器。android.hardware.SensorListener在传感器值实时更改时,希望接收更新的类要实现的接口。用以监视硬件中一个或多个可用传感器。android.media.MediaRecorder用于录制媒体的类。android.FaceDetector人脸进行基本识别类。android.os.*可以与操作环境交互的包,包括电源管理、文件查看器、处理器和消息类。android.hardware.SensorManager包含几个常量,这表示Android传感器系统的不同方面,包括:传感器类型:方向、加速表、光线、磁场、临近性、温度等。采样率最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个提示,或者一个建议。不保证特定的采样率可用。准确性高、低、中、不可靠。SensorListener接口是传感器应用程序的中心。它包括两个必需方法:onSensorChanged(intsensor,floatvalues[])方法在传感器值更改时调用。该方法只对受此应用程序监视的传感器调用。该方法的参数包括:一个整数,指示更改的传感器;一个浮点值数组,表示传感器数据本身。有些传感器只提供一个数据值,另一些则提供三个浮点值。方向和加速表传感器都提供三个数据值。当传感器的准确性更改时,将调用onAccuracyChanged(intsensor,intaccuracy)方法。参数包括两个整数:一个表示传感器,另一个表示该传感器新的准确值。要与传感器交互,应用程序必须注册以侦听与一个或多个传感器相关的活动。注册使用SensorManager类的registerListener方法完成。并非所有支持Android的设备都支持SDK中定义的所有传感器。以Android为中心的传感器系统相机拍摄:packagecom.android.cameraAndroid;importandroid.app.Activity;importandroid.os.Bundle;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importandroid.content.Context;importandroid.content.Intent;importandroid.graphics.PixelFormat;importandroid.hardware.Camera;importandroid.hardware.Camera.Parameters;importandroid.hardware.Camera.PictureCallback;importandroid.hardware.Camera.ShutterCallback;importandroid.media.AudioManager;importandroid.media.ToneGenerator;import.Uri;importandroid.os.Environment;importandroid.os.StatFs;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.SurfaceHolder;importandroid.view.SurfaceView;publicclassCameraAndroidextendsActivity{ privateCameraPreviewpreview; privateCameracamera; privateToneGeneratortone; privatestaticfinalintOPTION_SNAPSHOT=0; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); preview=newCameraPreview(this); setContentView(preview); } @Override publicbooleanonOptionsItemSelected(MenuItemitem){ intitemId=item.getItemId(); switch(itemId){ caseOPTION_SNAPSHOT: //拍摄照片 camera.takePicture(shutterCallback,null,jpegCallback); break; } returntrue; } //返回照片的JPEG格式的数据 privatePictureCallbackjpegCallback=newPictureCallback(){ publicvoidonPictureTaken(byte[]data,Cameracamera){ Parametersps=camera.getParameters(); if(ps.getPictureFormat()==PixelFormat.JPEG){ //存储拍照获得的图片 Stringpath=save(data); //将图片交给Image程序处理 Uriuri=Uri.fromFile(newFile(path)); Intentintent=newIntent(); intent.setAction("ent.action
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届安徽省舒城桃溪中学高三一诊考试数学试卷含解析
- 2025届安徽定远启明中学高三六校第一次联考数学试卷含解析
- 上海市虹口区市级名校2025届高三下学期第六次检测语文试卷含解析
- 河北省唐山市滦县二中2025届高考临考冲刺数学试卷含解析
- 2025届黑龙江省哈尔滨市第十九中学高三下学期联合考试数学试题含解析
- 广西百色市普通高中2025届高三一诊考试英语试卷含解析
- 江西省宜春市上高县二中2025届高考英语倒计时模拟卷含解析
- 潍坊第一中学2025届高三二诊模拟考试英语试卷含解析
- 2025届安徽省A10联盟高三第二次调研数学试卷含解析
- 河北省卓越联盟2025届高考冲刺模拟数学试题含解析
- 过程装备与控制工程专业大学生职业生涯规划书
- 2023《机械制造基础》机考真题库附答案
- 中建预应力管桩专项施工方案
- 银屑病教学查房课件
- 防止重复性劳损RSI的预防措施
- 仓库人员的安全教育培训
- 基于Java技术的酒店管理系统设计
- 宿主-病原体相互作用机制
- 早发性卵巢功能不全的临床诊疗专家共识(2023版)
- 全国职业院校技能大赛中职组法律实务比赛试题附答案
- 滑坡监测方案
评论
0/150
提交评论