高级Android复习点上届遗留复习资料Word文档下载推荐.docx

上传人:b****6 文档编号:20694017 上传时间:2023-01-25 格式:DOCX 页数:22 大小:411.59KB
下载 相关 举报
高级Android复习点上届遗留复习资料Word文档下载推荐.docx_第1页
第1页 / 共22页
高级Android复习点上届遗留复习资料Word文档下载推荐.docx_第2页
第2页 / 共22页
高级Android复习点上届遗留复习资料Word文档下载推荐.docx_第3页
第3页 / 共22页
高级Android复习点上届遗留复习资料Word文档下载推荐.docx_第4页
第4页 / 共22页
高级Android复习点上届遗留复习资料Word文档下载推荐.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

高级Android复习点上届遗留复习资料Word文档下载推荐.docx

《高级Android复习点上届遗留复习资料Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《高级Android复习点上届遗留复习资料Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。

高级Android复习点上届遗留复习资料Word文档下载推荐.docx

4.手势识别(AndroidGesture)是用来侦测、处理手势相关动作的技术。

Gesture大致可以分为两类:

一类是触摸屏手势,另一类是输入法手势。

•触摸屏手势比较简单,通常就是按下、抬起、滑动、翻页这几种。

Android系统为我们提供了手势识别工具GestureDetector,当我们接收到用户触摸消息时,将这个消息交给GestureDetector去加工,我们通过设置监听器获得GestureDetector处理后的手势。

•输入法手势就是在触摸屏上手绘一个形状,这个形状可以由一个或者多个笔画构成。

创建完成之后,系统会自动保存手势动作在mnt/sdcard/gestures里面。

把gestures文件复制到工程/res/raw下,就可以在项目里面使用这些手势了。

一.简答题:

1.XX地图应用

/*获取APIkey

(1)获取MapsAPIkey需要两样东西:

应用的signingcertificate和它的packagename。

(2)获取这个key之后,把它加在应用程序的AndroidManifest.xml文件里即可。

*/

(1)注册XX账号,并登录。

(有XX账号的话直接登录)

(2)申请Key

安全码的组成规则为:

Android签名证书的sha1值+“;

”+packagename(即:

数字签名+分号+包名)。

获取Android签名证书的sha1值,可以在eclipse中直接查看:

windows->

preferance->

android->

build。

包名是Android应用程序本身在AndroidManifest.xml中定义的名称:

(3)下载AndroidSDKv3.4.0

XX地图SDKv3.4.0为开发者提供了便捷的显示XX地图数据的接口,通过以下几步操作,即可在您的应用中使用XX地图数据。

第一步:

创建并配置工程

第二步:

在AndroidManifest中添加开发密钥、所需权限等信息

1)在application中添加开发密钥

2)添加所需权限

<

uses-permissionandroid:

name="

android.permission.GET_ACCOUNTS"

/>

android.permission.USE_CREDENTIALS"

第三步,在布局xml文件中添加地图控件

第四步,在应用程序创建时初始化SDK引用的Context全局变量

第五步,创建地图Activity,管理地图生命周期

2.Handler

android:

Handler概念理解与运用

android.os.Handler是AndroidSDK中处理定时操作的核心类。

通过Handler类,可以提交和处理一个Runnable对象。

这个对象的run方法可以立刻执行,也可以在指定时间之后执行(可以称为预约执行)。

handler类允许你发送消息和处理线程消息队列中的消息及runnable对象。

handler实例都是与一个线程和该线程的消息队列一起使用,一旦创建了一个新的handler实例,系统就把该实例与一个线程和该线程的消息队列捆绑起来,这将可以发送消息和runnable对象给该消息队列,并在消息队列出口处处理它们。

handler类有两种主要用途:

(1)、按照时间计划,在未来某时刻,对处理一个消息或执行某个runnable实例。

(2)、把一个对另外线程对象的操作请求放入消息队列中,从而避免线程间冲突。

Android在设计时引入了Handler消息机制,每一个消息发送到主线路的消息队列中,消息队列遵循先进先出原则,发送消息不会阻塞线程,而接收线程会阻塞线程。

Handler允许发送并处理Message消息,Message对象通过主线程的MessageQueue消息队列相关联的Message和Runnable对象进行存取。

每个Handler实例对Message消息发送和接收与对应主线程和主线程的消息队列有关。

当创建一个新的Handler时,Handler就属于当前主线程,主线程MessageQueue消息队列也同步创建,即Handler会绑定到创建该Handler的主线程/消息队列上。

然后,Handler就可以通过主线程的消息队列发送和接收Message消息对象了。

handler机制的原理

andriod提供了Handler和Looper来满足线程间的通信。

Handler先进先出原则。

Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。

1)Looper:

一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。

2)Handler:

你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;

或者接收Looper从MessageQueue取出)所送来的消息。

3)MessageQueue(消息队列):

用来存放线程放入的消息。

4)线程:

UIthread通常就是mainthread,而Android启动程序时会替它建立一个MessageQueue。

Handler的特性

1)Android里没有全局MessageQueue消息队列,每个Activity主线程都有一个独立的MessageQueue消息队列,消息队列采用先进先出原则。

不同APK应用不能通过Handler进行Message通信,同一个APK应用中可以通过Handler对象传递而进行Message通信。

2)每个Handler实例都会绑定到创建它的线程中(一般位于主线程,即Activity线程),但是Handler实例可以在任意线程中创建(可以在主线程或子线程中创建)

3)Handler发送消息使用MessageQueue消息队列,每个Message发送到消息队列里面;

发送消息采用异步方式,所以不会阻塞线程。

而接收线程则采用同步方式,所以会阻塞线程,所以当Handler处理完一个Message对象后才会去取下一下消息进行处理。

HANDLE(句柄)是Windows操作系统中的一个概念。

在Windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标示这些资源的标示号,即句柄。

句柄指的是一个核心对象在某一个进程中的唯一索引,而不是指针。

由于地址空间的限制,句柄所标识的内容对进程是不可见的,只能由操作系统通过进程句柄列表来进行维护。

句柄列表:

每个进程都要创建一个句柄列表,这些句柄指向各种系统资源,比如信号量,线程,和文件等,进程中的所有线程都可以访问这些资源。

3.传感器应用程序的开发分为以下几个步骤:

(1)调用Context.getSystemService(SENSOR_SERVICE)方法获取传感器管理服务。

(2)调用SensorManager的getDefaultSensor(inttype)方法,获取指定类型的传感器。

(3)在Activity的onResume()中,调用SensorManager的registerListener(SensorEventListenerlistener,Sensorsensor,intrate)方法注册监听。

(4)实现SensorEventListener接口中下列两个方法,监听并取得传感器Sensor的状态。

PublicabstractvoidonAccuracyChanged(Sensorsensor,intaccuracy)//监听传感器精度变化

publicabstractvoidonSensorChanged(SensorEventevent)

//监听传感器值变化

•方向传感器(Orientation)简称为O-sensor,主要感应方位的变化。

现在已经被SensorManager.getOrientation()所取代,我们可以通过磁力计MagneticField和加速度传感器Accelerometer来获得方位信息。

该传感器同样捕获三个参数,分别代表手机沿传感器坐标系的X轴、Y轴和Z轴转过的角度。

•磁力传感器(MagneticField)简称为M-sensor,该传感器主要读取的是磁场的变化,通过该传感器便可开发出指南针、罗盘等磁场应用。

磁场传感器读取的数据同样是空间坐标系三个方向的磁场值,其数据单位为uT,即微特斯拉。

接下来通过对之前方向传感器案例的更改,来完成磁场数据的读取。

•重力传感器(Gravity)简称GV-sensor,主要用于输出重力数据。

在地球上,重力数值为9.8,单位是m/s^2。

坐标系统与加速度传感器坐标系相同。

当设备复位时,重力传感器的输出与加速度传感器相同。

•加速度传感器(Accelerometer)简称G-sensor,主要用于感应设备的运动。

该传感器捕获三个参数,分别表示空间坐标系中X、Y、Z轴方向上的加速度减去重力加速度在相应轴上的分量,其单位均为m/s2。

•光传感器(Light),主要用来检测设备周围光线强度。

光强单位是勒克斯(lux),其物理意义是照射到单位面积上的光通量。

光传感器的开发与之前介绍过的各种传感器的开发步骤基本相同,只是监测的是SENSOR_LIGHT,即捕捉光的强度。

四.程序题

1.HttpURLConnection接口

创建一个项目,项目中包括四个Activity类,通过主Activity类的三个按钮和一个文本输入框分别跳转到另外三个Activity网页信息显示活动。

在每个跳转后的Activity活动的生命周期函数OnCreat()里,调用HttpURLConnection网络接口向服务发出请求,获取服务器返回信息。

(1)主activity

publicclassLabFourTestOneMainActivityextendsActivity{

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//StrictMode.setThreadPolicy(newStrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());

//StrictMode.setVmPolicy(newStrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());

Buttonb_One=(Button)findViewById(R.id.button1);

Buttonb_Two=(Button)findViewById(R.id.button2);

Buttonb_Three=(Button)findViewById(R.id.button3);

EditTexte_One=(EditText)findViewById(R.id.editText1);

b_One.setOnClickListener(newView.OnClickListener(){

@Override

publicvoidonClick(Viewv){

//TODOAuto-generatedmethodstub

Intenti=newIntent(LabFourTestOneMainActivity.this,GetOneActivity.class);

LabFourTestOneMainActivity.this.startActivity(i);

}

});

b_Two.setOnClickListener(newView.OnClickListener(){

Intenti=newIntent(LabFourTestOneMainActivity.this,GetTwoActivity.class);

b_Three.setOnClickListener(newView.OnClickListener(){

Intenti=newIntent(LabFourTestOneMainActivity.this,PostOneActivity.class);

EditTexte_One=(EditText)findViewById(R.id.editText1);

Stringstr=e_One.getText().toString();

i.putExtra("

text"

"

"

+str);

}

publicbooleanonCreateOptionsMenu(Menumenu){

//Inflatethemenu;

thisaddsitemstotheactionbarifitispresent.

getMenuInflater().inflate(R.menu.activity_main,menu);

returntrue;

}

(2)跳转后的第一个Activity页面显示信息是通过Get方式请求服务器返回信息不携带参数

publicclassGetOneActivityextendsActivity{

Stringstr;

StringhttpUrl;

TextViewt_One;

Handlerh_One=newHandler(){

@Override

publicvoidhandleMessage(Messagemsg){

//TODOAuto-generatedmethodstub

super.handleMessage(msg);

t_One.setText(msg.getData().toString());

}

};

//TODOAuto-generatedmethodstub

this.setContentView(R.layout.getone);

t_One=(TextView)findViewById(R.id.textView1);

t_One.setMovementMethod(ScrollingMovementMethod.getInstance());

httpUrl="

http:

//202.118.201.19:

80/softwareschool/index2.html"

;

newThread(newRunnable(){

publicvoidrun(){

StringresultData="

URLurl=null;

try{

url=newURL(httpUrl);

}catch(MalformedURLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

if(url!

=null)

{

try{

HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();

InputStreamReaderin=newInputStreamReader(urlConn.getInputStream());

BufferedReaderbuffer=newBufferedReader(in);

StringinputLine=null;

while((inputLine=buffer.readLine())!

=null)

{

resultData+=inputLine+"

\n"

}

in.close();

urlConn.disconnect();

if(resultData!

Bundleb=newBundle();

b.putString("

megpost"

resultData);

Messagemeg=newMessage();

meg.setData(b);

h_One.sendMessage(meg);

else

Log.d("

test"

"

读取页面内容为空!

);

}

catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

else

Log.d("

url为空!

}).start();

(3)第二个Activity页面显示信息是通过Get方式携带参数请求服务器返回信息

publicclassGetTwoActivityextendsActivity{

super.onCreate(sa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1