Android真机开发教程,Android

如何用 5
真机开发教程 ZZ:DasonQQ:623466642空间:/dasonn/ 一:系统安装与HelloWorld 【目的】安装智能手机开发相关软件平台。
【要求】
1、完成智能手机开发平台安装、以及相关配置
2、并实现HelloWorld3、了解项目的基本文件目录结构 【原理】Eclipse安装原理,Android编程方法 【过程】
1、安装JAVAJDK下载网址:/javase/downloads/2、安装Eclipse下载网址:/downloads/直接解压拷贝。

3、安装Android或安装Android的SDK。

4、安装ADT(AndroidDevelopmentTools)或
5、安装手机USB驱动或也可由系统自行搜索安装,需将手机设置在“应用开发”功能上。
如果用模拟器调试, 则可暂时不装。

6、建立新项目,实现HelloWorld。
OpenEclipse.ClickthemenuFile->New->Project.ExpandtheAndroidfolderandselectAndroidProject.NametheprojectHelloWorld 得到的文件结构如下: 运行: 选运行的设备,可以是模拟器,也可以是真机(如果已经连接好真实手机的话):模拟器真手机 模拟器运行: 真实手机调试: 在Android的应用开发中,通常使用的是java语言开发,除了需要熟悉JAVA语言基础知识之外,还需要了解Android提供扩展的java功能。
Android重要包的描述android.appandroid.content 封装了Android应用程序全局模型的高级类。
包含用于在设备上访问和发布数据的类。
android.databaseandroid.database.sqlite android.graphics android.graphics.drawable android.graphics.glutils android.hardware android.location
android.mediaandroid.openglandroid.osandroid.providerandroid.saxandroid.speech.recognitionandroid.telephonyandroid.telephony.gsmandroid.textandroid.text.methodandroid.text.styleandroid.util android.viewandroid.view.animationandroid.webkitandroid.widget 包含了用于浏览内容提供源返回数据的类。
包含了SQLLite数据库管理类,应用程序可以利用这些类来管理其私有数据库。
允许你直接在屏幕上绘图的绘图工具,比如画布、颜色过滤器、点和矩形等。
提供了用于管理多种可视界面元素的类,这些可视界面元素仅用于显示,例如bitmap和gradient。
提供了大量能够在Android设备上使用OpenGL嵌入式系统版(OpenGLES)绘图的类.提供对硬件设备的支持,这些硬件设备不一定会出现在每一个Android设备上。
定义Android定位和相关服务的类。
定位,视频,音频和相关的服务用于网络连接的类,功能比.*强大。
提供OpenGL(高性能图形算法行业标准)工具。
3D加速等提供设备上基础的操作系统服务、信息传递和进程间通信。
提供用于方便地访问Android支持的内容提供源的类。
一个可以方便地编写高效、健壮的SAXhandler的框架。
提供用于语音识别的类。
提供了用于拨打、接收以及监听电话和电话状态的工具。
提供了用于从GSM电话上控制或读取数据的类。
提供了用于在屏幕上绘制或跟踪文本和文本跨度的类。
提供了用于监听或修改键盘输入的类。
提供了用于预览或修改视图对象中文本跨度形式的类。
提供了通用的工具方法,例如日期/时间操作、64位编码解码器、字符串数组互换方法和与XML相关的方法。
提供了用于处理屏幕布局和用户交互的基本UI类。
提供了动画处理的类提供了浏览网页的工具。
widget包包含了用在应用程序屏幕上的UI元素(绝大部分可视)。
文件格式描述: Android的相关文件类型:Java---应用程序源文件Android本身相当一部分是由java编写而成,而且android应用必须使用java开发 class---java编译后的目标文件:是由java虚拟机编译而成一个字节码文件,在之前我们用所学的j2ee以及j2se它是一个可执行文件,但是在Android当中它只是一个目标文件即过渡文件 dex---Android平台可执行文件:Android自己提供了一个虚拟机(Dalvik),这种虚拟机执行的并非java字节码,而是另一种字节码:dex格式的字节码,在JVM将java文件编译成Class文件后,再次通过Android 平台工具将此Class文件转换成dex字节码 apk文件---Android上的安装文件Apk是Android安装包的扩展名,一个Android安装包包含了与某个Android应用程序相关的所有文件,apk文件将androidManifest.xml文件,应用程序代码(dex文件)资源文件和其他文件打成一个压缩包,一个工程只能打进一个apk文件(有点类似exe文件)。
二:界面设计:控件与布局 【目的】Android编程基础,UI设计。
【要求】
1、了解Android编程原理
2、掌握界面控件设计
3、掌握控件的事件处理编程 【原理】UI设计原理 【过程】
1、了解各种控件的基本功能各种控件:MenuTextView、EditText、 Button Radiobutton List ProgressBar;
2、了解布局Layout的应用各种控件通过布局,确定在屏幕上显示的方式,与相互位置关系。
有设计一个良好的 要机界面,必须了解相关的布局,选择合适的布局安排各个控件。
多种Layout:AbsoluteLayoutFrameLayoutGridViewLinearLayoutListLayoutRadioGroupTableLayout………
3、利用布局安排各种控件,设计良好用户界面 三:图形绘制与OpenGLES 【目的】在屏幕绘制各种图形,了解OpenGL 【要求】
1、了解在屏幕绘图方法
2、了解OpenGL 【原理】 【过程】
1、绘制直线、园、曲线等各种图形
2、显示字符
3、利用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.opengljavax.microedition.khronos.egljavax.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网络访问方法 【要求】
1、了解手机WEB网站访问编程
2、通过网络进行数据访问
3、了解数据库使用 【原理】利用Android网络访问协议 【过程】
1、访问WEB网站,通过HttpResponse类,读入网络数据。
AndroidSDK网络包: 包 描述 Android网络访问socket。
该包包括URI类,不仅仅是传统的联网方面。
.http 处理Android有关Http协议类。
.wifi 在Android平台上管理有关WiFi(802.11无线)应用的类。
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访问手机硬件及手机上的各种传感器 【要求】
1、获取手机上电话、短信等各种功能的编程
2、了解手机上各种传感器的功能与使用方法 【原理】利用手机本身的功能与相关传感器的使用 【过程】
1、了解程序使用手机电话功能的方法 短信收发:◆发送短信只需要几行代码,如下:SmsManagersms=SmsManager.getDefault();PendingIntentpi=PendingIntent.getBroadcast(this,0,newIntent(),0);sms.sendTextMessage(phoneNumber,null,MsgStr,pi,null);其中参数phoneNumber和MsgStr均是String类型,表示接收方的电话号码和短信内容◆接收短信主要是继承BroadcaseReceiver类,覆盖onReceive函数:.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=.android.TinySMS.RESULT"; //privateTextViewmessage;privateButtonsnd;privateEditTexttel;privateEditTexttxt;privateSentReceiverreceiver=newSentReceiver(); privateclassSentReceiverextendsBroadcastReceiver{ @OverridepublicvoidonReceive(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中声明权限:
2、手机上有多种传感器,可以对这些传感器进行编程。
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[])方法在传感器值更改时调用。
该方法只对受此应用程序监视的传感器调用。
该方法的参数包括: �一个整数,指示更改的传感器;�一个浮点值数组,表示传感器数据本身。
有些传感器只提供一个数据值,另一些则 提供三个浮点值。
方向和加速表传感器都提供三个数据值。
当传感器的准确性更改时,将调用uracyChanged(intsensor,inturacy)方法。
参数包括两个整数:一个表示传感器,另一个表示该传感器新的准确值。
要与传感器交互,应用程序必须注册以侦听与一个或多个传感器相关的活动。
注册使用 SensorManager类的registerListener方法完成。
并非所有支持Android的设备都支持SDK中定义的所有传感器。
以Android为中心的传感器系统 相机拍摄:.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; @OverridepublicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState);preview=newCameraPreview(this);setContentView(preview);} @OverridepublicbooleanonOptionsItemSelected(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("android.intent.action.VIEW");intent.setDataAndType(uri,"image/jpeg");startActivity(intent);} //快门按下的时候onShutter()被回调privateShutterCallbackshutterCallback=newShutterCallback(){ publicvoidonShutter(){if(tone==null)//发出提示用户的声音tone=newToneGenerator(AudioManager.STREAM_MUSIC,ToneGenerator.MAX_VOLUME);tone.startTone(ToneGenerator.TONE_PROP_BEEP2); }}; privateStringsave(byte[]data){Stringpath="/sdcard/"+System.currentTimeMillis()+".jpg";try{//判断SD卡上是否有足够的空间Stringstorage=Environment.getExternalStorageDirectory().toString();StatFsfs=newStatFs(storage);longavailable=fs.getAvailableBlocks()*fs.getBlockSize();if(availablefile.exists())//创建文件file.createNewFile();FileOutputStreamfos=newFileOutputStream(file);fos.write(data);fos.close();}catch(Exceptione){ e.printStackTrace();returnnull;}returnpath;} @OverridepublicbooleanonCreateOptionsMenu(Menumenu){ menu.add(
0,OPTION_SNAPSHOT,
0,R.string.snapshot);returnsuper.onCreateOptionsMenu(menu);} classCameraPreviewextendsSurfaceViewimplementsSurfaceHolder.Callback{SurfaceHoldermHolder; publicCameraPreview(Contextcontext){super(context);mHolder=getHolder();mHolder.addCallback(this);mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); }//Sureface创建的时候,此方法被调用publicvoidsurfaceCreated(SurfaceHolderholder){ //打开摄像头,获得Camera对象camera=Camera.open();try{ //设置显示camera.setPreviewDisplay(holder);}catch(IOExceptionexception){camera.release();camera=null;}} //Surface销毁的时候,此方法被调用publicvoidsurfaceDestroyed(SurfaceHolderholder){ Preview();//释放Cameracamera.release();camera=null;} publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intw,inth){ //已经获得Surface的width和height,设置Camera的参数Camera.Parametersparameters=camera.getParameters();parameters.setPreviewSize(w,h);camera.setParameters(parameters);//开始预览camera.startPreview();}}} 拍摄模拟:

标签: #设计制作 #网页设计 #网页设计 #公众 #如何处理 #软件 #长安 #文件