版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《手機(jī)應(yīng)用開(kāi)發(fā)》
實(shí)驗(yàn)指導(dǎo)書(shū)
西南科技大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院
2015.11
目錄
《手機(jī)應(yīng)用開(kāi)發(fā)》.............................................
實(shí)驗(yàn)指導(dǎo)書(shū)...................................................
實(shí)驗(yàn)一:搭建Android開(kāi)發(fā)平臺(tái)和創(chuàng)建HolloWorld程序..............
實(shí)驗(yàn)?zāi)康?...................................................
實(shí)驗(yàn)要求....................................................
實(shí)驗(yàn)內(nèi)容....................................................
一、安裝并配置JavaJDK.................................
二、下載安裝集成ADT(AndroidDevelopmentTools插件的Eclipse(即
adt-bundle).............................
三、創(chuàng)建Android虛擬設(shè)備(AVD)........................
四、創(chuàng)建第一個(gè)Android工程項(xiàng)H—HeiloWorld.............
實(shí)驗(yàn)二:UI設(shè)計(jì)..................................................
實(shí)驗(yàn)?zāi)康?...................................................
實(shí)驗(yàn)要求....................................................
實(shí)驗(yàn)內(nèi)容....................................................
一、常用控件............................................
二、界面布局............................................
三、事件處理............................................
實(shí)驗(yàn)三:Intent、Activity應(yīng)用...................................
一、實(shí)驗(yàn)?zāi)康?...............................................
二、實(shí)驗(yàn)要求................................................
三、實(shí)驗(yàn)步驟................................................
1、創(chuàng)建項(xiàng)目.............................................
2、添加布局文件.........................................
4.彳修改AndroidManifest,xml文件........................
實(shí)驗(yàn)四:sorvico應(yīng)用............................................
一、實(shí)驗(yàn)?zāi)康?...............................................
二、實(shí)驗(yàn)要求................................................
三、實(shí)驗(yàn)步驟................................................
1、創(chuàng)建項(xiàng)目.............................................
2、布局文件.............................................
3、修改AndroidManifest.xml文件......................24
實(shí)驗(yàn)五:SQLite和SQLiteDatabase應(yīng)用...........................
一、實(shí)驗(yàn)?zāi)康?...............................................
二、實(shí)驗(yàn)要求...............................................18
1、創(chuàng)建項(xiàng)目.............................................
2、布局文件.............................................
3、創(chuàng)建Activity........................................
實(shí)驗(yàn)六:圖形繪制與OpenGLES...................................
一、實(shí)驗(yàn)?zāi)康?...............................................
二、實(shí)驗(yàn)要求................................................
1、了解在屏幕繪圖方法...................................
2、了解OpenGL..........................................
三、實(shí)驗(yàn)原理................................................
四、實(shí)驗(yàn)過(guò)程...............................................23
1、繪制直線(xiàn)、園、曲線(xiàn)等各種圖形........................
2、顯小字符.............................................
3、利用OpenGLES方法編程...............................
實(shí)驗(yàn)七:網(wǎng)絡(luò)訪(fǎng)問(wèn)與服務(wù).........................................
一、實(shí)驗(yàn)?zāi)康?...............................................
二、實(shí)驗(yàn)要求................................................
1、了解手機(jī)WEB網(wǎng)站訪(fǎng)問(wèn)編程.............................
2、通過(guò)網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)訪(fǎng)問(wèn).................................
3、了解數(shù)據(jù)庫(kù)使用.......................................
三、實(shí)驗(yàn)原理................................................
四、實(shí)驗(yàn)過(guò)程................................................
實(shí)驗(yàn)八硬件訪(fǎng)問(wèn)與傳感器.........................................
一、實(shí)驗(yàn)?zāi)康?...............................................
二、實(shí)驗(yàn)要求................................................
1、獲取手機(jī)上電話(huà)、短信等各種功能的編程................
2、了解手機(jī)上各種傳感器的功能與使用方法................
三、實(shí)驗(yàn)原理................................................
四、實(shí)驗(yàn)過(guò)程................................................
1、了解程序使用手機(jī)電話(huà)功能的方法......................
2、手機(jī)上有多種傳感器,可以對(duì)這些傳感器進(jìn)行編程。.....
實(shí)驗(yàn)九:綜合實(shí)驗(yàn)................................................
平時(shí)實(shí)驗(yàn)報(bào)告模板.................................................
《綜合實(shí)驗(yàn)》設(shè)計(jì)實(shí)現(xiàn)報(bào)告........................................
報(bào)告撰寫(xiě)安排表...................................................
注意:平時(shí)實(shí)驗(yàn)只完成實(shí)驗(yàn)一到實(shí)驗(yàn)五
實(shí)驗(yàn)一:搭建Android開(kāi)發(fā)平臺(tái)和創(chuàng)建HelloWorld程序
實(shí)驗(yàn)?zāi)康?/p>
本次實(shí)驗(yàn)的目的是讓同學(xué)們熟悉搭建智能手機(jī)開(kāi)發(fā)平臺(tái)的過(guò)程,了解
Andorid應(yīng)用程序項(xiàng)i的基本文件目錄結(jié)構(gòu),并實(shí)現(xiàn)HelloWorld小例程。
實(shí)驗(yàn)要求
1.學(xué)習(xí)Android開(kāi)發(fā)平臺(tái)的搭建及相關(guān)配置
2.創(chuàng)建項(xiàng)目并熟悉文件目錄結(jié)構(gòu)
3.實(shí)現(xiàn)例程HelloWorld
實(shí)驗(yàn)內(nèi)容
一、安裝并配置JavaJDK
1.下載安裝JDK,網(wǎng)址如下。
(s-2133151.htm)
(1)了解JDK與JRE的區(qū)別。
(2)了解JDK不同版本號(hào)的區(qū)別。
(3)了解jdk-8u65-windows-i586.exe與
jdk-8u65-windows-x64.exe的區(qū)別
(4)查看并記錄下實(shí)驗(yàn)用機(jī)上jdk的版本以及安裝地址。
2.配置JDK:
XP:右鍵“我的電腦”?“屬性”?“高級(jí)”?“環(huán)境變量”
WIN7:右健“我的電腦”?“高級(jí)系統(tǒng)設(shè)置”?“環(huán)境變量”
新建系統(tǒng)變量:
JAVAJIOME,(JDK安裝目錄)。
PATH,%JAVAHOME%\bin;%JAVAH0ME%\jr\bino
CLASSPATH,.;%JAVA_HOME%\lib;%JAVA_HOME%\1ib\too1
s.jar(前面的.;一定要加上)
配置完成后在CMD中輸入java-version和javac
-version,能看到對(duì)應(yīng)的JDK版本即配置成功,如下圖所示。
請(qǐng)思考設(shè)置這三個(gè)環(huán)境變量的作用。
二、下載安裝集成ADT(AndroidDevelopmentTools插件的Eclipse
(即adt-bundle)
1.認(rèn)識(shí)開(kāi)發(fā)工具
根據(jù)桌面的eelipse(adt)快捷找到本機(jī)上的adt-bundle,打
開(kāi)并了解其目錄結(jié)構(gòu)c
2.認(rèn)識(shí)、使用SDK管理器工具
在adt-bundle文件目錄里找到并啟動(dòng)SDKManager,exe,查
看本機(jī)目前安裝的AndroidSDK插件情況。
3.啟動(dòng)Eclipse
在adt-bundle文件目錄里找到并啟動(dòng)eclipse,exe,啟動(dòng)后查
看本機(jī)上eclipse配置的工作區(qū)位置(工程源代碼存放的位置)。
請(qǐng)思考如何使代碼編輯區(qū)的代碼顯示行號(hào),如果修改代碼區(qū)
字符的大小。
三、創(chuàng)建Android虛擬設(shè)備(AVD)
1.啟動(dòng)AVD(AndroidVirtualDevice)管理器
在adt-bundle的sdk目錄下找到并啟動(dòng)AVDManager.exe
2.嘗試創(chuàng)建一臺(tái)虛擬的目標(biāo)調(diào)試設(shè)備,注意物理內(nèi)存不要設(shè)置
太大。
四、創(chuàng)建第一個(gè)Android工程項(xiàng)目一HelloWorld
1.打開(kāi)Eclipse。
2.點(diǎn)擊“File"?"New"?"Project”?“AndroidProject
創(chuàng)建HelloWorld項(xiàng)目。
3.輸入合法的ApplicationName>ProjectName和PackageName
后一路Next,完成項(xiàng)目的創(chuàng)建。創(chuàng)建成功后的項(xiàng)目文件結(jié)構(gòu)如
下:
找到并查看項(xiàng)目中的如下幾個(gè)文件:
a)MainActivity.java
b)R.java
c)activity_main.xml
d)strings,xml
e)AndroidManifest.xml
f)Project,properties
4.打開(kāi)eclipse下方的Problem查看器查看警告。
5.選擇項(xiàng)目HelloWorld點(diǎn)擊右鍵RunAs?"Android
Application”,用之前創(chuàng)建的AVD運(yùn)行此項(xiàng)目。
6.如果運(yùn)行失敗,查看相應(yīng)的提示信息后,重新跳到步驟1創(chuàng)
建一個(gè)新的項(xiàng)目HelloWorld2,創(chuàng)建時(shí)將MinimunRequired
SDK設(shè)置為Android4.0或以上。
請(qǐng)思考第一次創(chuàng)建的項(xiàng)目為什么會(huì)多生成一個(gè)appcompat_V7
目錄,并且運(yùn)行失敗。更改最低SDK版本后運(yùn)行成功。
實(shí)驗(yàn)二:UI設(shè)計(jì)
實(shí)驗(yàn)?zāi)康?/p>
本次實(shí)驗(yàn)的目的是讓同學(xué)們熟悉Android開(kāi)發(fā)中的UI設(shè)計(jì),包括了
解和熟悉常用控件的使用、界面布局和事件處理等內(nèi)容。
實(shí)驗(yàn)要求
1.熟悉和掌握界面控件設(shè)計(jì)
2.了解Android界面布局
3.掌握控件的事件處理
實(shí)驗(yàn)內(nèi)容
一、常用控件
1.常用控件介紹
Android中有許多常用控件(簡(jiǎn)單分類(lèi)):
文本框:TcxtVicw、EditText
按鈕:Button、RadioButton、RadioGroup、CheckBox、ImageButton
歹U表:List^Expandab1eListView、Spinner>AutoCompleteTextView、
GridVieu\TmageView
進(jìn)度條:ProgressRarxProgressDialogxSeokBar、RatingF^ar
選擇器:DatePicker>TimePicker
菜單:Menu、Cor.tentMenu
對(duì)話(huà)框:Dialog、ProgressDialog
常用的控件有文本框、按鈕和列表等。
2.控件的實(shí)現(xiàn)
在上一個(gè)實(shí)驗(yàn)中,我們用一個(gè)TextView控件實(shí)現(xiàn)了在界面顯示一句
“Hell。World!\
現(xiàn)在我們來(lái)看一看.xml文件和編碼的相互關(guān)系。
將MainActivity.java中代碼修改如下:
packagecom.example.helloworld;^
importandroid.app.Activity;^
importandroid.os.Bundle;^
importandroid.view.Menu;^
importandroid.view.MenuItem;^
importandroid.widget.Button;^
importandroid,widget.TextView;publicclassMainActivityextendsActivity
/**Calledwhentheactivityisfirstcreated.*/**
(?Override*-1
publicvoidonCreate(BundlesavedlnstanceState){/
super.onCreatefsavedlnstanceState);^
setContentView(R.layout.activity_main);<J
o
TextViewtextView=(TextViewjfindViewByldtR.id.textV/ewOl);^
Buttonbutton=(Button)findViewByld(R.id.6utton01);v
上
卜
注意在上面并沒(méi)有為textView和button設(shè)置文本內(nèi)容等,另外
textView的初始化代碼為:
TextViewtextView=(TextView)findViewByld(R.id.textViewOl);
此處初始化用到了id為textViewOl的TextViewo
在項(xiàng)FlIR錄中找到/res/layout/activity_main.xml,修改代碼如下:
<?xmlversion="1.0"encoding="utf-8"?>*-'
<LinearLayoutxmlns:android="/apk/res/android"^
android:orientation="verticar,*'
android:layout_width="fiIl_parentV
android:layout_height=,'fill_parent"*J
x
<TextView-
android:id="@+id/textView01"一
android:layout_width=,,fill_parent"一
android:layout_height="wrap_content"一
android:text="@string/hello_worldn4J
<Button*-1
android:id="@+id/button01"*J
android:layout_width=,,fill_parent,,*J
android:layout_height="wrap_content,'~
android:text="@string/button"v
/>*-1
v/LinearLayout〉/
注意上面列出了兩個(gè)控件:TextView和Button,id分別為textViewOl
和buttonOl,它們的文本內(nèi)容分別為@string/hello_world和
?string/buttono
在項(xiàng)目目錄中找到/res/values/strings.xml,如下:
<?xmlversion="1.0"encoding="utf-8"?x
〈resources”
<stringname=°app_na/neM>helloworld2</string>J
<stringname=uaction_settingsM>Settings</string”
<stringname=nhe£fo_ivortdM>Helloworld!</string>J
<stringnan\e="button">Iamabutton!</string>^
</resources>"
可以看到兩個(gè)string:hello和button的內(nèi)容分別為'HelloTheAndroid
World!w和“Iamabutton!”,即使文本框和按鈕在界面上顯示的內(nèi)容,
如下圖所示:
3.控件的屬性
可以直接在類(lèi)中為控件設(shè)置屬性,也可以在xml文件中設(shè)置屬性。每
個(gè)控件都有一系列的屬性,例如id、size、text、color等等,大家可
以找找API查看控件的屬性。
二、界面布局
Android中有很多布局:
FrameLayout:最簡(jiǎn)單的一個(gè)布局對(duì)象。它里面只顯示一個(gè)顯示對(duì)象。
Android屏幕元素中所有的顯示對(duì)象都將會(huì)固定在屏幕的左上角,不
能指定位置。但允許有多個(gè)顯示對(duì)象,但后一個(gè)將會(huì)直接在前一個(gè)之
上進(jìn)行覆蓋顯示,把前一個(gè)部份或全部擋?。ǔ呛笠粋€(gè)是透明的)。
LinearLayout:以單一方向?qū)ζ渲械娘@示對(duì)象進(jìn)行排列顯示,如以垂
直排列顯示,則布局管理器中將只有一列;如以水平排列顯示,見(jiàn)布
局管理器中將只有一行。同時(shí),它還可以對(duì)個(gè)別的顯示對(duì)象設(shè)置顯示
比例。
TableLayout:以擁有任意行列的表格對(duì)顯示對(duì)象進(jìn)行布局,每個(gè)顯
示對(duì)象被分配到各自的單元格之中,但單元格的邊框線(xiàn)不可見(jiàn)。
AbsolutcLayout:允許以坐標(biāo)的方式,指定顯示對(duì)象的具體位置,左
上角的坐標(biāo)為(0,0),向下及向右,坐標(biāo)值變大。這種布局管理器由
于顯示對(duì)象的位置定死了,所以在不同的設(shè)備上,有可能會(huì)出現(xiàn)最終
的顯示效果不一致。
RelativeLayout:允許通過(guò)指定顯示對(duì)象相對(duì)于其它顯示對(duì)象或父級(jí)
對(duì)象的相對(duì)位置來(lái)布局。如一個(gè)按鈕可以放于另一個(gè)按鈕的右邊,或
者可以放在布局管理器的中央。
布局中可以放置控件,而每個(gè)布局又可以嵌套其他布局,這種思想和
之前學(xué)習(xí)java的布局是一樣的。
例如在activity_main.xml中如下布局:
在一個(gè)LinearLayout布局下嵌套了兩個(gè)LincarLayout,出來(lái)的效果
如下圖所示:
其他布局請(qǐng)同學(xué)們自行嘗試。
三、事件處理
事件監(jiān)聽(tīng)和時(shí)間處理的概念大家以前都學(xué)習(xí)過(guò),android中主要有如
下事件方法:
onClick(Viewv)一個(gè)普通的點(diǎn)擊按鈕事件
booleanonKeyMultiple(intkeyCode,intrepeatCount,KeyEvent
event)用于在多個(gè)事件連續(xù)時(shí)發(fā)生,用于按鍵重復(fù)
booleanonKeyDown(intkeyCode,KeyEventevent)用于在按鍵進(jìn)行
按下時(shí)發(fā)生
booleanonKeyUp(intkeyCode,KeyEventevent)用于在按鍵進(jìn)行
釋放時(shí)發(fā)生
onTouchEvent(MotionEventevent)觸摸屏事件,當(dāng)在觸摸屏上有動(dòng)
作時(shí)發(fā)生
booleanonKeyLongPress(intkeyCode,KeyEventevent)當(dāng)長(zhǎng)時(shí)間
按時(shí)發(fā)生
下面以點(diǎn)擊一個(gè)Button為例子:
為button添加了?個(gè)監(jiān)聽(tīng)buttonListener,對(duì)應(yīng)的onClick方法則
拋出了一則文本框提示用戶(hù),效果圖如下所示:
其它控件的使用請(qǐng)同學(xué)們自行嘗試。
實(shí)驗(yàn)三:Intent、Activity應(yīng)用
一、實(shí)驗(yàn)?zāi)康?/p>
本次實(shí)驗(yàn)的目的是讓同學(xué)們熟悉Intent和Activity的使用。Intent
的最常用的用途是綁定應(yīng)用程序組件。Intern用來(lái)在應(yīng)用程序Activity
間啟動(dòng)、停止和傳輸。并實(shí)現(xiàn)添加用戶(hù)名,密碼小例程。
二、實(shí)驗(yàn)要求
1.完成Android開(kāi)發(fā)平臺(tái)的搭建及相關(guān)配置
2.創(chuàng)建項(xiàng)目并熟悉文件目錄結(jié)構(gòu)
3.實(shí)現(xiàn)例程添加用戶(hù)名,密碼實(shí)驗(yàn)步驟
三、實(shí)驗(yàn)步驟
項(xiàng)目界面:添加用戶(hù)名,密碼,在另一頁(yè)面顯示用戶(hù)名。
1、創(chuàng)建項(xiàng)目
新建一個(gè)Android工程命名為testl,目錄結(jié)構(gòu)如下圖:
2、添加布局文件
修改main,xml布局文件(這里增加了兩個(gè)TextView,兩個(gè)EditView,一
個(gè)按鈕),如下圖
新建test2.xml布局文件(這里增加了兩個(gè)TextView),這個(gè)頁(yè)面是
用來(lái)顯示添加的用戶(hù)名,如下圖:
1<?xmlversion*wl.Owencoding-
2<LmearLayout
xmlns:android""http://schemas.androxd.com/apk/res/android"
,3android:layout_width=Mffiatch_parent"
5android:layout_height-Maatc2i_parent*>
6-<TextViewandroid:texc-w?string/Aeilow
android:2d?"S^-id/textVievln
android:layout_width-"vrap^content”
9aridroid:layout_height"ffurap_contentw/>
10<-<TextViewandroid:id-Hi?*id/editrext2w
11android:layouc_widch-content*|
12android:layout_height""yrap_content**/>
13</LmearLayout>
14
3、創(chuàng)建Activity
修改testl.java,并且新建一個(gè)Activity,一個(gè)是test2.java。,代
碼分別如下:
Testi,java
作用:獲得頁(yè)面輸入的內(nèi)容,存儲(chǔ)并跳轉(zhuǎn)到test2.xml。
Test2.java
作用:從Intent中獲得需要顯示name的值,并給TextView賦值。
4,修改AndroidManifest.xml文件
比較重要的一步啦,修改AndroidManifest.xml文件(將新增的
Activity,test2)注冊(cè)一下,代碼如下(第16行):
請(qǐng)嘗試使用startActivityForResult(Intentintent,intrequestCode)
方法實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)。
實(shí)驗(yàn)四:service應(yīng)用
一、實(shí)驗(yàn)?zāi)康?/p>
本次實(shí)驗(yàn)的目的是讓大家熟悉service的使用。一個(gè)使用Service
的典型的例子是,用戶(hù)一邊在手機(jī)做其他的事情,一邊聽(tīng)手機(jī)上
的音樂(lè)。其中,在后臺(tái)播放音樂(lè)就可以使用Service來(lái)實(shí)現(xiàn)。并
實(shí)現(xiàn)簡(jiǎn)單播放器的小例程。
二、實(shí)驗(yàn)要求
1.創(chuàng)建項(xiàng)目并熟悉文件目錄結(jié)構(gòu)。
2.實(shí)現(xiàn)例程簡(jiǎn)單播放器。
三、實(shí)驗(yàn)步驟
項(xiàng)目界面:
1、創(chuàng)建項(xiàng)目
新建一個(gè)Android工程命名為test1,目錄結(jié)構(gòu)如下圖:
0music
理src
田tju.service
①M(fèi)usicPIayer.java
_JjMusicService.java
莎gen[GeneratedJavaFiles]
,Android2.2
assets
阻res
上drawable-hdpi
drawable-ldpi
卷drawable-mdpi
&layout
」main.xml
&raw
區(qū)Itest.mp3
values
,:strings.xml
,aAndroidManifestjemI
圜default,properties
proguard.cfg
2、布局文件
修改main.Xml文件
修改MuseiPlayer,java文件,新建MusicService.java文件,代碼如下
圖:
MusciPlayer.java文件
MusicService.java
3、修改AndroidManifest.xml文件
比較重要的一步,修改AndroidManifest.xml文件(將新增的
service)注冊(cè)一下,代碼如下(第16行):
實(shí)驗(yàn)五:SQLite和SQLiteDatabase應(yīng)用
一、實(shí)驗(yàn)?zāi)康?/p>
1、本次實(shí)驗(yàn)的目的是讓大家熟悉Android中對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的相關(guān)的
接口、類(lèi)等。SQLiteDatabase這個(gè)是在android中數(shù)據(jù)庫(kù)操作使用最頻
繁的一個(gè)類(lèi)。通過(guò)它可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)的創(chuàng)建或打開(kāi)、創(chuàng)建表、插入數(shù)據(jù)、
刪除數(shù)據(jù)、查詢(xún)數(shù)據(jù)、修改數(shù)據(jù)等操作。
2、實(shí)現(xiàn)添加用戶(hù)名,愛(ài)好小例程。
二、實(shí)驗(yàn)要求
1、完成Android開(kāi)發(fā)平臺(tái)的搭建及相關(guān)配置
2、創(chuàng)建項(xiàng)目并熟悉文件目錄結(jié)構(gòu)
3、實(shí)現(xiàn)例程添加用戶(hù)名,愛(ài)好實(shí)驗(yàn)步躲
三、實(shí)驗(yàn)步驟
項(xiàng)目界面:輸入用戶(hù)名,愛(ài)好添加到數(shù)據(jù)庫(kù),由數(shù)據(jù)庫(kù)查詢(xún)出來(lái)顯
示插入的列表“當(dāng)單擊列表時(shí)會(huì)彈出Alert詢(xún)問(wèn)是否刪除,進(jìn)行刪除操
作。
1、創(chuàng)建項(xiàng)目
新建一個(gè)Android工程命名為Database,目錄結(jié)構(gòu)如下圖:
2、布局文件
修改main,xml布局文件,添加display,xml文件,用來(lái)顯示列表。
如下圖
Main.Xml
Display,xml
3、創(chuàng)建Activity
修改DatabaseActivity.java文件,新建DBHelper.java文件和
displayAvtivity.java,代碼如下圖:
DBHelper.java操作數(shù)據(jù)庫(kù)的工具類(lèi),該類(lèi)繼承SQLiteOpenHelpero
DatabaseActivity.java獲取頁(yè)面輸入的值,添加到數(shù)據(jù)庫(kù)
displayAvtivity.java顯示列表,刪除數(shù)據(jù)
實(shí)驗(yàn)六:圖形繪制與OpenGLES
一、實(shí)驗(yàn)?zāi)康?/p>
在屏幕繪制各種圖形,了解OpenGL
二、實(shí)驗(yàn)要求
1、了解在屏幕繪圖方法
2、了解OpenGL
三、實(shí)驗(yàn)原理
四、實(shí)驗(yàn)過(guò)程
1、繪制直線(xiàn)、園、曲線(xiàn)等各種圖形
2、顯示字符
3、利用OpenGLES方法編程
Android中的圖形系統(tǒng)采用Client/Server架構(gòu)。Server(即
SurfaceFlinger)主要由C++代碼編寫(xiě)而成。Client端代碼分為兩部分,
一部分是由Java提供的供應(yīng)用使用的api,另一部分則是由C++寫(xiě)成的底
層實(shí)現(xiàn)。
Android圖形系統(tǒng)中通過(guò)surface為view創(chuàng)建一個(gè)Canvas對(duì)象,管理
view在surface上的繪圖操作。View及其子類(lèi)(如TextView,Button)
要畫(huà)在surface上。
OpenGLES(OpenGLforEmbeddedSystems)是一個(gè)針對(duì)嵌入式應(yīng)用
的,免費(fèi)的,支持全功能2D、3D的跨平臺(tái)API(OpenGL?ESisaroyalty-free,
cross-platformAPIforfull-function2Dand3Dgraphicsonembedded
systems-includingconsoles,phones,appliancesandvehicles)。
目前主要由3個(gè)版本,LO,1.1,2.0o
OpenGLES1.0是以O(shè)penGL1.3規(guī)范為基礎(chǔ)的,OpenGLES1.1是
以O(shè)penGL1.5規(guī)范為基礎(chǔ)的,1.1完全兼容1.0。OpenGLES2.0則是
參照OpenGL2.0規(guī)范定義的。簡(jiǎn)單的來(lái)說(shuō),OpenGLES是OpenGL針對(duì)嵌
入式應(yīng)用的簡(jiǎn)化版,也就是android使用的標(biāo)準(zhǔn)。OpenGLES1.1強(qiáng)調(diào)api
的硬件加速,OpenGLES2.0更強(qiáng)調(diào)3D能力。
OpenGLES1.1和OpenGLES2.0之間的關(guān)系并不是舊版本和新版本之
間的差別,而是一個(gè)針對(duì)相對(duì)低端的應(yīng)用,一個(gè)針對(duì)高級(jí)應(yīng)用,OpenGL官
方的roadmap也是將這兩個(gè)版本并行發(fā)展的。2.X并不能百分百兼容1.X。
Android現(xiàn)在支持1.X和2.X。OpenGLES是專(zhuān)為內(nèi)嵌和移動(dòng)設(shè)備設(shè)計(jì)
的一個(gè)2D/3D輕量級(jí)圖形庫(kù),它基于OpenGLAPI設(shè)計(jì),是OpenGL三維圖
形API的子集。Android里有三個(gè)與OpenGL有關(guān)的包:
android.opengl
publicvoidonDrawFrame(GL10gl){
〃一般的。pongl程序,首先要做的就是清屏
gl.glClear(GL10.GL_COLOR_BUFFER_BIT\
GL10.GL_DEPTH_BUFFER_BIT);
〃緊接著設(shè)置模型視圖矩陣
gl.glMatrixMode(GL10.GLJIODELVIE^);
gl.glLoadldentity();〃清空矩陣
GLU.gluLookAt^,0,0,3,0,0,0,0,1,0);〃視點(diǎn)變換,
將相機(jī)位置設(shè)置為(0,0,3),同時(shí)指向(0,0,0)點(diǎn)
〃設(shè)置模型位置旋轉(zhuǎn)及縮放信息
gl.glTranslatef(O.Of,0.Of,-1.Of);〃將模型位置設(shè)置為(0,
0,-1)
floatangle=30.Of;
gl.glRotatef(angle,0,1,0);〃繞模型自身Y軸旋轉(zhuǎn)30度
gl.glRotatef(angle,1,0,0);〃繞模型自身X軸旋轉(zhuǎn)30度
gl.glScalef(1.2f,1.2f,1.2f);〃設(shè)置三方向的縮放系數(shù)
〃設(shè)置顏色
gl.glColor4f(0.Of,0.Of,0.Of,1.Of);
〃渲染立方體
mCube.draw(gl,gl.GLTRIANGLES);
//mCube.draw(gl,gl.GL_LINES);
}
實(shí)驗(yàn)七:網(wǎng)絡(luò)訪(fǎng)問(wèn)與服務(wù)
一、實(shí)驗(yàn)?zāi)康?/p>
掌握Android網(wǎng)絡(luò)訪(fǎng)問(wèn)方法
二、實(shí)驗(yàn)要求
1、了解手機(jī)WEB網(wǎng)站訪(fǎng)問(wèn)編程
2、通過(guò)網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)訪(fǎng)問(wèn)
3、了解數(shù)據(jù)庫(kù)使用
三、實(shí)驗(yàn)原理
利用Android網(wǎng)絡(luò)訪(fǎng)問(wèn)協(xié)議
四、實(shí)驗(yàn)過(guò)程
1、訪(fǎng)問(wèn)WEB網(wǎng)站,通過(guò)HttpResponse類(lèi),讀入網(wǎng)絡(luò)數(shù)據(jù)。
AndroidSDK網(wǎng)絡(luò)包:
包描述
android,netAndroid網(wǎng)絡(luò)訪(fǎng)問(wèn)socketo該包包括URI類(lèi),不僅
僅是傳統(tǒng)的聯(lián)網(wǎng)方面。
處理Android有關(guān)Http協(xié)議類(lèi)。
在A(yíng)ndroid平臺(tái)上管理有關(guān)WiFi(802.11無(wú)線(xiàn)
Ethernet)應(yīng)用的類(lèi)。
包含用于管理和發(fā)送SMS(文本)消息的類(lèi)。
讀入WEB數(shù)據(jù)例程:
HttpClientclient=newDefaultHttpClient();
HttpGetget=newHttpGet(url);
IlttpResponseresponse=client.execute(get);
HttpEntityentity=response.getEntityO;
〃嘗試讀取entity的長(zhǎng)度,返回-1表示長(zhǎng)度未知
longlength=entity.getContentLengthO;
TnputStreamis=entity.getConter.t();
Strings=null;
if(is!=null){
ByteArrayOutputStreambaos=new
ByteArrayOutputStream();
byte[]buf=newbyte[512];
intch=-1;
intcount=0;
while((ch=is.read(buf))!=-1){
baos.write(buf,0,ch);
count+=ch;
〃如果長(zhǎng)度已知,可以通過(guò)taskProgrossO通知監(jiān)聽(tīng)者任
務(wù)執(zhí)行的比例
if(length>0){
listener.taskProgress(this,count,length);
)
〃為了更好的演示進(jìn)度,讓線(xiàn)程休眠100ms
Thread,s/ee,(100);
)
Log.e(〃HttpTask〃,“l(fā)ength=〃+
baos.toByteArray().1ength);
〃返回內(nèi)容
s=newString(baos.toByteArray());
)
returns;
實(shí)驗(yàn)八硬件訪(fǎng)問(wèn)與傳感器
一、實(shí)驗(yàn)?zāi)康?/p>
通過(guò)底層API訪(fǎng)問(wèn)手機(jī)硬件及手機(jī)上的各種傳感器
二、實(shí)驗(yàn)要求
1、獲取手機(jī)上電話(huà)、短信等各種功能的編程
2、了解手機(jī)上各種傳感器的功能與使用方法
三、實(shí)驗(yàn)原理
利用手機(jī)本身的功能與相關(guān)傳感器的使用
四、實(shí)驗(yàn)過(guò)程
1、了解程序使用手機(jī)電話(huà)功能的方法
短信收發(fā):
?發(fā)送短信只需要幾行代碼,如下:
SmsManagersms=SmsManager.getDefault();
PendingTntentpi=Pendingintent.getBroadcast(this,0,new
Intent(),0);
sms.sendTcxtMossage(phonoNumbor,null,klsgStr,pi,null);
其中參數(shù)phoneNumber和MsgStr均是String類(lèi)型,表示接收方的電話(huà)號(hào)
碼和短信內(nèi)容
?接收短信主要是繼承BroadcascRcccivcr類(lèi),覆蓋onReceive函數(shù):
package
import
import;
import
import
import
import
import
import
import
import
import
publicclassTinySMSextendsActivity{
publicstaticfinalStringSMS_ACTION=;
//privateTextViewmessage;
privateButtonsnd;
privateEditTexttel;
privateEditTexttxt;
privateSentReceiverreceiver=newSentReceiver();
privateclassSentReceiverextendsBroadcastReceiver{
?Override
publicvoidonReceive(Contextcontext,Intentintent){
if(intent.getAction().equals){
intcode=getResultCodeO;
〃短消息發(fā)送成功
if(code==Activity.RESULT_OK)
Toast.makeTextiyinySMS.this,R.string.msg_senti
Toast.LENGTHSHORT),show();
)
)
);
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedlnstanceState){
super.onCreate(savedlnstanceState);
setContentView(R.layout,ma//?);
tel=(EditText)findViewByld(R.id.EditTextOl);
tel.setText(〃5554〃);〃模擬器之間互發(fā)短信
txt=(EditText)findViewByld(R.id.EditTextO2);
txt.setText]〃我用自己的程序試試發(fā)短信。〃);
snd=(Button)findViewByld(R.ButtonOl);
snd.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(ViewargO){
StringphoneNo=tel.getText().toStringO;
Stringmessage=txt.getText().toString();
if(phoneNo.length()>0&&message,length()>0){
sendSMS(phoneNo,message);
}else(
Tcast.makeTex(TinySMS.this,
〃請(qǐng)重新輸入電話(huà)號(hào)碼和短信內(nèi)容〃,
Toast.LENGTH_LON(J).show();
}
}
));
)
privatevoidsendSMS(Stringaddress,Stringcontent)
{
SmsManagermanager=SmsManager.gelDefaultQ;
Intenti=newIntent(^SMS_ACT10^;
〃生成Pendingintent,當(dāng)消息發(fā)送完成,接收到廣播
Pendingintentsentlntent二Pendingintent.getBroadcast^
this,
0,
i,
Pendingintent.FLAG_ONE_SHOT);
manager.sendTextMessage(
address,
null,
content,
sentlntent,
null);
如果要收發(fā)短信,還需在A(yíng)ndroidManifest.xml中聲明權(quán)限:
<uses-permissionandroid:name=X/uses-permission>
<uses-permissionandroid:name=X/uses-permission>
2、手機(jī)上有多種傳感器,可以對(duì)這些傳感器進(jìn)行編程。
AndroidSDK中提供的面向硬件的特性
特性描述
相機(jī)交互的類(lèi),可以截取照片、獲取預(yù)覽屏幕的
圖像,修改理相機(jī)操作的參數(shù)。
允許訪(fǎng)問(wèn)Android平臺(tái)傳感器的類(lèi)。并非所有
配備Android的設(shè)備都支持SensorManager
中的所有傳感器。
在傳感器值實(shí)時(shí)更改時(shí),希望接收更新的類(lèi)要實(shí)
現(xiàn)的接口。用以監(jiān)視硬件中一個(gè)或多個(gè)可用傳感
器。
用于錄制媒體的類(lèi)。
android.FaceDetector人臉進(jìn)行基本識(shí)別類(lèi)。
android,os.*可以與操作環(huán)境交互的包,包括電源管理、文件
查看器、處理器和消息類(lèi)。
包含幾個(gè)常量,這表示Android傳感器系統(tǒng)的不同方面,包括:
傳感器類(lèi)型:方向、加速表、光線(xiàn)、磁場(chǎng)、臨近性、溫度等。采樣率
最快、游戲、普通、用戶(hù)界面。
當(dāng)應(yīng)用程序請(qǐng)求特定的采樣率時(shí),其實(shí)只是對(duì)傳感器子系統(tǒng)的一個(gè)提
示,或者一個(gè)建議。不保證特定的采樣率可用。準(zhǔn)確性高、低、中、不可
靠。
ScnsorListcncr接口是傳感器應(yīng)用程序的中心。它包括兩個(gè)必需方
法:
onSensorChangec(intsensor,floatvalues]])方法在傳感器值更改
時(shí)調(diào)用。該方法只對(duì)受此應(yīng)用程序監(jiān)視的傳感器調(diào)用。該方法的參數(shù)包括:
一個(gè)整數(shù),指示更改的傳感器;
一個(gè)浮點(diǎn)值數(shù)組,表示傳感器數(shù)據(jù)本身。有些傳感器只提供一個(gè)數(shù)
據(jù)值,另一些則提供三個(gè)浮點(diǎn)值。方向和加速表傳感器都提供三個(gè)
數(shù)據(jù)值。
當(dāng)傳感器的準(zhǔn)確性更改時(shí),將調(diào)用onAccuracyChangcd[int
sensor,intaccuracy)方法。參數(shù)包括兩個(gè)整數(shù):一個(gè)表示傳感器,另
一個(gè)表示該傳感器新的準(zhǔn)確值。
要與傳感器交互,應(yīng)用程序必須注冊(cè)以偵聽(tīng)與一個(gè)或多個(gè)傳感器相關(guān)
的活動(dòng)。注冊(cè)使用SensorManager類(lèi)的registerListener方法完成。
并非所有支持Android的設(shè)備都支持SDK中定義的所有傳感器。
以Android為中心的傳感器系統(tǒng)
相機(jī)拍攝:
publicclassCameraAndroidextendsActivity{
privateCamerapreviewpreview;
privateCameracamera;
privateToneGereratortone;
privatestaticfinalintOPTION_SNAPSIIOT=0;
?Override
publicvoidonCreate(BundlesavedlnstanceState){
super.onCreate(savedlnstanceState);
preview二newCameraPreview(this);
setContentView(preview);
}
?Override
publicbooleanonOptions11emSe1ected(MenuItemi
intitemTd=item,getltemld();
switch(itemld){
caseOPTIONSNAPSHOT:
〃拍攝照片
camera.takePicture(shutterCallback,null,
JpegCallback);
break;
returntrue;
}
〃返回照片的JPEG格式的數(shù)據(jù)
privatePictureCallbackjpegCallback=newPictureCallback()(
publicvoidonPictureTaken(byte[]data,Cameracamera){
Parametersps=camera.getParameters();
if(ps.getPictureFormat()==PixelFormat.JPEG){
〃存儲(chǔ)拍照獲得的圖片
Stringpath=save(data);
〃將圖片交給Image程序處理
Uriuri=Uri.fromFile(newFile(path));
Intentintent=newIntent();
intent.setDataAndType(uri,image/jpegz/);
startActivity(intent);
)
);
〃快門(mén)按下的時(shí)候onShutter()被回調(diào)
privateShutterCallbackshutterCallback=new
ShutterCallbackO{
publicvoidonShutter(){
if(tone==null)
〃發(fā)出提示用戶(hù)的聲音
tone=newToneGenerator(AudioManager.STREAMMUSIC,
ToneGenerator.MAX_VOLUME);
tone.startTone(ToneGenerator.TONE_PROP_BEEP2);
)
};
privateStringsave(byte[]data){
Stringpath
〃/sdcard/^+System.currentTimeMillis()+〃.jpg〃;
try{
〃判斷SD卡上是否有足夠的空間
Stringstorage
Environment.getExternalStorageDirectory().toStringO;
StatFsfs=newStatFs(storage);
longavailable
fs.getAvailableBlocks()*fs.getBlockSizeO;
if(available<data.length){
〃空間不足直接返回空
returnnull;
}
Filefile=newFile(path);
if(!file,exists())
〃創(chuàng)建文件
file.createNewFileO;
FileOutputStreamfos=newFileOutputStream(file);
fos.write(data);
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 瓣葉對(duì)合修復(fù)手術(shù)的術(shù)后疼痛控制策略
- 游戲策劃崗位專(zhuān)業(yè)能力測(cè)試題庫(kù)及答案解析
- 廚師職業(yè)資格證考試烹飪技巧與菜品創(chuàng)新含答案
- 獨(dú)居糖尿病患者的智能監(jiān)護(hù)系統(tǒng)應(yīng)用
- 外貿(mào)公司外貿(mào)業(yè)務(wù)員面試題與經(jīng)驗(yàn)
- 深度解析(2026)GBT 19067.1-2003產(chǎn)品幾何量技術(shù)規(guī)范(GPS) 表面結(jié)構(gòu) 輪廓法 測(cè)量標(biāo)準(zhǔn) 第1部分實(shí)物測(cè)量標(biāo)準(zhǔn)
- 環(huán)境監(jiān)測(cè)技術(shù)人員面試題及操作指南
- 深度解析(2026)《GBT 18927-2002包裝容器 金屬輔件》
- 深度解析(2026)《GBT 18863-2002免燙紡織品》
- 特殊人群罕見(jiàn)病用藥的劑量調(diào)整策略
- 2026考研政治模擬預(yù)測(cè)卷及答案
- 2025-2026學(xué)年八年級(jí)數(shù)學(xué)上冊(cè)人教版(2024)第17章 因式分解 單元測(cè)試·基礎(chǔ)卷
- 風(fēng)水顧問(wèn)聘請(qǐng)合同范本
- 2025年量子計(jì)算驅(qū)動(dòng)的電力系統(tǒng)彈性提升-探索與展望報(bào)告-
- 廣東5年(2021-2025)高考生物真題分類(lèi)匯編:專(zhuān)題05 遺傳的分子基礎(chǔ)及生物的變異與進(jìn)化(原卷版)
- 盒馬鮮生促銷(xiāo)方案
- 2025年政府采購(gòu)評(píng)審專(zhuān)家考試題庫(kù)含答案
- 云南中考英語(yǔ)5年(21-25)真題分類(lèi)匯編-中考語(yǔ)篇題型 閱讀理解句子還原7選5
- 2025年廣西度三類(lèi)人員(持b證人員)繼續(xù)教育網(wǎng)絡(luò)學(xué)習(xí)考試題目及答案
- 食品法律法規(guī)教學(xué)課件
- 掘進(jìn)機(jī)維護(hù)保養(yǎng)課件
評(píng)論
0/150
提交評(píng)論