版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
傳智播客一級軟件人才實(shí)作培訓(xùn)專家!
www
3G應(yīng)用開發(fā)之Android
講師:黎活明
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
什么是3G
3G,全稱為3rdGeneration,中文含義就是指第三代數(shù)字通信。
所謂3G,是指將無線通信與國際互聯(lián)網(wǎng)等多媒體通信結(jié)合的新一代移動通信系統(tǒng)。
3G只是一種通信技術(shù)標(biāo)準(zhǔn),符合這個標(biāo)準(zhǔn)的技術(shù)有WCDMA、CDMA2000.TD-
SCDMA三種無線接口標(biāo)準(zhǔn)。中國聯(lián)通使用的是WCDMA(世界上大部分3G網(wǎng)絡(luò)都采
用的是該標(biāo)準(zhǔn));中國電信使用的是CDMA2000(日、韓和北美使用);中國移動
使用的是具有自主知識產(chǎn)權(quán)的TD-SCDMA(只有中國才使用)。相對第一代模擬制
式手機(jī)(1G)和第二代GSM、CDMA等數(shù)字手機(jī)(2G),3G手機(jī)能處理圖像、音樂、視
頻等多種媒體形式,提供包括網(wǎng)頁瀏覽、電話會議、電子商務(wù)等多種信息服務(wù)。3G
網(wǎng)絡(luò)與前兩代的主要區(qū)別是整合了互聯(lián)網(wǎng)并且數(shù)據(jù)傳輸速度有很大的提升。
目前中國正在建設(shè)3G網(wǎng)絡(luò),大城市的3G網(wǎng)絡(luò)基本上已經(jīng)鋪設(shè)好,像北京鋪設(shè)好了超
過2000個基站,深圳鋪設(shè)了1000多個基站。但是要全民普及到3G手機(jī)尚且需要幾年
時間?,F(xiàn)在,大家使用的手機(jī)大多還是2.5G手機(jī),符合2.5G網(wǎng)絡(luò)的接口標(biāo)準(zhǔn)有
CDMA20001X和GPRS,中國聯(lián)通使用的是CDMA20001X標(biāo)準(zhǔn),中國移動使用的是
GPRS標(biāo)準(zhǔn)。目前,我們可以把2.5G移動通信技術(shù)看作是2G邁向3G的銜接性技術(shù),
在2.5G網(wǎng)絡(luò)下出現(xiàn)了如WAP、藍(lán)牙(Bluetoot)等技術(shù)。對于2.5G網(wǎng)絡(luò),我們應(yīng)該也要
有所了解,因?yàn)橐院蟠蠹业狡髽I(yè)中有可能會面對2.5G網(wǎng)絡(luò)下的應(yīng)用,如:wap項(xiàng)目。
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家!:
什么是Android
?Android是Google在2007年11月5日推出的開源手機(jī)操作系統(tǒng)。
目前Android在中國的發(fā)展是非?;鸬?,為了節(jié)省研發(fā)費(fèi)用,國
內(nèi)很多的手機(jī)廠商和移動運(yùn)營商紛紛加入到了android陣營,其
中包括中國移動,中國聯(lián)通,中國電信,華為,聯(lián)想等大企業(yè)。
在中國不管是知名的手機(jī)生產(chǎn)廠商還是山寨手機(jī)廠商,都已經(jīng)
開始生產(chǎn)Android操作系統(tǒng)的手機(jī)。
?另外android應(yīng)用的范圍不僅僅在手機(jī),還被應(yīng)用在汽車、平板
電腦、和智能上網(wǎng)設(shè)備上,聽說國外已經(jīng)有了安裝Android系統(tǒng),
并且能夠上網(wǎng)的智能電飯煲,用戶在千里之外就可以操作電飯
煲進(jìn)行煮飯。
?由于大家大多使用的手機(jī)都屬傻瓜手機(jī),也就是打打電話、發(fā)
發(fā)短信。從今天開始,大家必須改變這個觀念了,大家需要把
智能手機(jī)看作是一臺電腦,只要安裝上相應(yīng)軟件它就能完成電
腦所能完成的一切。
北京傳智播客教育
廣傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
智能手機(jī)軟件平臺
智能手機(jī)軟件平臺有:
Symbian,WindowsMobile,RIMBlackBerry,Android,iPhone,
Java/J2MEo
2010年市場份額:
Symbian36.6%
Android25.5%
iPhone16.7
windowsMobile2.8%
linux2.1%
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
如何安裝AndroidSDK和Eclipse插件
所需開發(fā)環(huán)境:
JDK5或以上版本(僅有JRE不夠)、Eclipse3.4或以上版本
下載用于在Eclipse開發(fā)android應(yīng)用的ADT插件
在企業(yè)開發(fā)中,很多程序員使用EclipseIDE作為應(yīng)用的開發(fā)環(huán)境。為了使得Android應(yīng)用的創(chuàng)建,運(yùn)行
和調(diào)試更加方便快捷。Android的開龍:團(tuán)隊(duì)專門針對一EclipseIDE走制了一個插件:Android
DevelopmentTools(ADT)
下載地址:http://dl.google.eom/android/ADT-8.0.1.zip
安裝Eclipse插件(ADT)
啟動Eclipse,選擇Help>InstallNewSoftware,在出現(xiàn)的對話框里,點(diǎn)擊Add按鈕,在對話框的
name一欄輸入“ADT”,然后點(diǎn)擊Archive…,瀏覽和選擇已經(jīng)下載的ADT插件壓縮文件。
點(diǎn)擊0K.。返回可用軟件的視圖,你會看到這個插件,然后選擇DeveloperTools(會選中下面的
"AndroidDeveloperTools"和"AndroidEditors"),點(diǎn)擊Next,最后重啟Eclipse。
下載安裝AndroidSDK:
AndroidSDK包含了開發(fā)Android應(yīng)用所依賴的jar文件、運(yùn)行環(huán)境及相關(guān)工具。
下載土也址:/android/android-sdk_r08-windows.zip
\下載完SDK后,把.zip文件解壓到你電腦上合適位置。啟動Eclipse,選擇window->preferences,
視圖左邊點(diǎn)擊android,在右邊的SDKLocation中選擇AndroidSDK所在位置。
北京傳智播客教育
北京傳智播客教育
傳智播客一高級軟件人才實(shí)作培訓(xùn)專家!
開發(fā)第一個Android應(yīng)用
北京傳智播客教育
廣傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
開發(fā)第一個Android應(yīng)用
點(diǎn)擊”finish”即可完成項(xiàng)目的創(chuàng)建,創(chuàng)建后的項(xiàng)目已經(jīng)是一個可運(yùn)行―
的Android應(yīng)用,我們可以通過下面方式運(yùn)行此應(yīng)用:
點(diǎn)擊工具欄上機(jī)器人形狀的虛擬設(shè)備管理器(簡稱“AVD”),如下:
北京傳智播客教育
傳智播客一高級軟件人才實(shí)作培訓(xùn)專家!
開發(fā)第一個Android應(yīng)用
在打開的虛擬設(shè)備管理器中創(chuàng)建一個虛擬手機(jī):
CreateA¥DCancel
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家!:
開發(fā)第一個Android應(yīng)用
在項(xiàng)目上右鍵點(diǎn)擊runas-^Androidapplication,如下圖:
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
Android應(yīng)用程序架構(gòu)
src/java原代碼存放目錄
gen/自動生成目錄
gen目錄中存放所有由Android開發(fā)工具自動生成的文件。目錄中最重要的就是R.java文件。這個文件
由Android開發(fā)工具自動產(chǎn)生的。Android開發(fā)工具會自動根據(jù)你放入res目錄的資源,同步更新修改
R.java文件。正因?yàn)镽.java文件是由開發(fā)工具自動生成的,所以我們應(yīng)避免手工修改R.java。R.java在
應(yīng)用中起到了字典的作用,它包含了各種資源的id,通過R.java,應(yīng)用可以很方便地找到對應(yīng)資源。
res/資源(Resource)目錄
在這個目錄中我們可以存放應(yīng)用使用到的各種資源,如xml界面文件,圖片或數(shù)據(jù)。具體請看ppt下方
備注欄。
assets資源目錄
Android除了提供/res目錄存放資源文件外,在/assets目錄也可以存放資源文件,而且/assets目錄下
的資源文件不會在R.java自動生成ID,所以讀取/assets目錄下的文件必須指定文件的路徑,如:
file:///android_asset/xxx.3gp
AndroidManifest.xml項(xiàng)目清單文件
這個文件列出了應(yīng)用程序所提供的功能,以后你開發(fā)好的各種組件需要在該文件中進(jìn)行配置,如果應(yīng)
用使用到了系統(tǒng)內(nèi)置的應(yīng)用(如電話服務(wù)、互聯(lián)網(wǎng)服務(wù)、短信服務(wù)、GPS服務(wù)等等),你還需在該文件
中聲明使用權(quán)限。
perties項(xiàng)目環(huán)境信息,一般是不需要修改此文件
北京傳智播客教育
廣傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
電話拔號器
效果圖:
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
電話拔號器
因?yàn)閼?yīng)用要使用手機(jī)的電話服務(wù),所以要在清單文件
AndroidManifest.xml中添加電話服務(wù)權(quán)限:
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="/apk/res/android"
package="cn.itcast.action"
android:versionCode="1"
android:versionName="1.0">
略….
<uses-sdkandroid:minSdkVersion=I<6"/>
<uses-permissionandroid:name="android.permission.CALL_PH0NE'7>
</manifest>
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
電話拔號器
界面布局:
<?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:layout_width="fill_parent"android:layout_height="wrap_content"
android:text="@string/inputmobile'7>
<EditTextandroid:layout_width="fill_parent"android:layout_height="wrap_content"
android:id="@+id/mobile'7>
<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"
android:text="@string/button"
android:id="@+id/button"/>
</LinearLayout>
LinearLayout(線性布局)、AbsoluteLayout(絕對布局)、RelativeLayout(相對布局)、
\TableLayout俵格布扃)、FrameLayout(幀布局)
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
Android中的顯示單位
?px(pixels)像素
一般HVGA代表320x480像素,這個用的比較多。
?dip或dp(deviceindependentpixels)設(shè)備獨(dú)立像素
這個和設(shè)備硬件有關(guān),一般為了支持WVGA、HVGA和QVGA推薦使用這個,不依賴像素。
?sp(scaledpixels—bestfortextsize)比彳列像素
主要處理字體的大小,可以根據(jù)系統(tǒng)的字體自適應(yīng)。
除了上面三個顯示單位,下面還有幾個不太常用:
?in(inches)英寸
?mm(millimeters)毫米
?pt(points)點(diǎn),1/72英寸
為了適應(yīng)不同分辨率,不同的像素密度,推薦使用dip,文字使用sp。
北京傳智播客教育
廣傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
電話拔號器
Activity:
publicclassDialerActionextendsActivity{
?Override
publicvoidonCreate(BundlesavedlnstanceState){
super.onCreate(savedlnstanceState);
setContentView(R.layout.main);
Buttonbutton=(Button)findViewByld(R.id.button);
button.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(Viewv){
EditTexteditText=(EditText)findViewByld(R.id.mobile);
Intentintent=newlntent(lntent.ACTION_CALL,Uri.parse("tel:"+
editText.getText()));
DialerAction.this.startActivity(intent);
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
電話拔號器
測試步驟:
1>在Eclipse中運(yùn)行一止匕應(yīng)用
2>在Dos窗口中進(jìn)入androidSDK安裝路徑的tools目錄,輸入以下命令再開啟一個Android模擬器:
emulator-dataitcast
注:itcast為用戶數(shù)據(jù)存取文件,如果該文件不存在,默認(rèn)在tools目錄創(chuàng)建該文件
5554即為該手機(jī)的電話號碼
疆加2:44PM
3>在電話擾號器中輸入上圖現(xiàn)顯的電話號碼
北京傳智播客教育
廣傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
“尚未注冊網(wǎng)絡(luò)”錯誤信息的解決辦法
打開Android模擬器時,出現(xiàn)無信號,拔打電話或發(fā)短信時,提示“尚未注冊網(wǎng)絡(luò)”錯誤信息的解決方
案如下。
?場景一:你的電腦沒有連接上互聯(lián)網(wǎng),同時也沒有在局域網(wǎng)。
解決辦法:右鍵點(diǎn)擊網(wǎng)上鄰居,選擇"屬性",在網(wǎng)絡(luò)連接窗口中右鍵點(diǎn)擊"本地連接",選擇"屬性",設(shè)置TCP/IP屬性如下:
IP地址:00
子網(wǎng)掩碼
默認(rèn)網(wǎng)關(guān):00
首選DNS服務(wù)器:00
?場景二:你的電腦沒有連接上互聯(lián)網(wǎng),但在局域網(wǎng)。
解決辦法:右鍵點(diǎn)擊網(wǎng)上鄰居,選擇"屬性",在網(wǎng)絡(luò)連接窗口中右鍵點(diǎn)擊"本地連接",選擇"屬性",設(shè)置TCP/IP屬性如下:
IP地址:設(shè)置成你所在局域網(wǎng)的IP,如:00
子網(wǎng)掩碼:設(shè)置成你所在局域網(wǎng)的掩碼,如:
默認(rèn)網(wǎng)關(guān):設(shè)置成你所在局域網(wǎng)的網(wǎng)關(guān),一般網(wǎng)關(guān)的IP格式為:*.*.*」,如:
首選DNS服務(wù)器:設(shè)置成你所在局域網(wǎng)的路由器IP,一般路由器的IP格式為:*.*.*/,如:192.16811
.最后一種解決方案是:讓你的電腦連接上互聯(lián)網(wǎng)。
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家!:
短信發(fā)送器
效果圖:
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
短信發(fā)送器
因?yàn)閼?yīng)用要使用手機(jī)的短信服務(wù),所以要在清單文件
AndroidManifest.xml中添加短信服務(wù)權(quán)限:
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="/apk/res/android"
package="cn.itcast.sms"
android:versionCode="1"
android:versionName="1.0">
略….
<uses-sdkandroid:minSdkVersion=u4"/>
<uses-permissionandroid:name="android.permission.SEND_SMS7>
</manifest>
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家!:
短信發(fā)送器_________________________________________
界面布局:
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="/apk/res/android"
android:orientation="verticariandroid:layout_width="fill_parent"android:layout_height="fill_parent">
<TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"
android:text="@string/inputmobile'7>
<EditTextandroid:layout_width="fill_parent"android:layout_height="wrap_content"
android:id="@+id/mobile'7>
<TextViewandroid:Iayout_width="fill_parent"android:layout_height="wrap_content"
android:text="@string/content"/>
<EditTextandroid:layout_width="fill_parent"android:layout_height="wrap_content"
android:minLines="3"
android:id="@+id/content"/>
<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"
android:text="@string/button"
android:id="@+id/button'7>J
V</LinearLayout>/
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
短信發(fā)送器
Activity主要代碼:
Stringmobile=mobileView.getText().toString();
Stringcontent=contentView.getText().toString();
SmsManagersmsManager=SmsManager.getDefault();
Pendinglntentsentlntent=Pendinglntent.getBroadcast(SMSSender.this,0,new
lntent(),0);
〃如果字?jǐn)?shù)超過70,需拆分成多條短信發(fā)送
List<String>msgs=smsManager.divideMessage(content);
for(Stringmsg:msgs){
smsManager.sendTextMessage(mobile,null,msg,sentlntent,null);
〃第四個參數(shù)用于告之短信發(fā)送狀態(tài),最后?個參數(shù)用于告之短信接收狀態(tài)
)
Toast.makeText(SMSSender.this,“短信發(fā)送完成",Toast.LENGTH_LONG).show();
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
短信發(fā)送器
測試步驟:
1>在Eclipse中運(yùn)行一止匕應(yīng)用
2>在Dos窗口中進(jìn)入androidSDK安裝路徑的tools目錄,輸入以下命令再開啟一個Android模擬器:
emulator-dataitcast
注:itcast為用戶數(shù)據(jù)存取文件,如果該文件不存在,默認(rèn)在tools目錄創(chuàng)建該文件
______5556即為該手機(jī)電話號碼
3>在短信發(fā)送器的手機(jī)號中輸入上圖現(xiàn)顯的電話號碼
_目前And_roid系統(tǒng)_對中文短_信尚未_支持,所以發(fā)送中文短信會有亂碼,這個問題日后會被解決的J。
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家!:
發(fā)送彩信
可以通過調(diào)用系統(tǒng)自帶的短信程序發(fā)送彩信:
Intentintent=newlntent(lntent.ACTION_SEND);
intent.putExtra(lntent.EXTRA_STREAM,Uri.parse("file:///sdcard/cong.png"));
intent.putExtra("address",);
intent.putExtra("exit_on_sent",true);
intent.putExtra("subject","it'ssubject");
intent.putExtra("sms_body","it'scontent");
intent.setType("image/jpeg");〃視頻:video/mpeg*,文本:text/plain
startActivity(intent);
北京傳智播客教育
廠傳智播客—高級軟件人才實(shí)作培訓(xùn)專家!:
對應(yīng)用進(jìn)行單元測試
在實(shí)際開發(fā)中,開發(fā)android軟件的過程需要不斷地進(jìn)行測試。使用Junit測試框架,是正規(guī)Android開
發(fā)的必用技術(shù),在Junit中可以得到組件,可以模擬發(fā)送事件和檢測程序處理的正確性。
第一步:首先在AndroidManifest.xml中加入下面紅色代碼:
<manifestxmlns:android="/apk/res/android"
package="cn.itcast.action"android:versionCode="r'android:versionName="1.0">
<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
<uses-libraryandroid:name="android.test.runner"/>
</application>
<uses-sdkandroid:minSdkVersion="6"/>
<instrumentationandroid:name="android.test.lnstrumentationTestRunner"
android:targetPackage="cn.itcast.action"android:label="TestsforMyApp"/>
</manifest>
上面targetPackage指定的包要和應(yīng)用的package相同。
第二步:編寫單元測試代碼(選擇要測試的方法,右鍵點(diǎn)擊“RunAs”-“AndroidJunitTest”):
importandroid.test.AndroidTestCase;
importandroid.util.Log;
publicclassXMLTestextendsAndroidTestCase{
publicvoidtestSomething()throwsThrowable{
Assert.assertTrue(1+1==3);
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
數(shù)據(jù)存儲與訪問
很多時候我們開發(fā)的軟件需要對處理后的數(shù)據(jù)進(jìn)行存儲,以供再次訪
問。Android為數(shù)據(jù)存儲提供了如下幾種方式:
?文件
?SharedPreferences(參數(shù))
?SQLite數(shù)據(jù)庫
?內(nèi)容提供者(Contentprovider)
?網(wǎng)絡(luò)
k7
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家!:
使用文件進(jìn)行數(shù)據(jù)存儲
首先給大家介紹使用文件如何對數(shù)據(jù)進(jìn)行存儲,Activity提供了openFileOutput()方法可以用于把數(shù)
據(jù)輸出到文件中,具體的實(shí)現(xiàn)過程與在J2SE環(huán)境中保存數(shù)據(jù)到文件中是一樣的。
publicclassFileActivityextendsActivity{
?OverridepublicvoidonCreate(BundlesavedInstancestate){
FileOutputStreamoutStream=this.openFileOutputCitcast.txt",Context.MODE_PRIVATE);
outStream.write("傳智播客".getBytes。);
outStream.close();
}
}
openFileOutput()方法的第一參數(shù)用于指定文件名稱,不能包含路徑分隔符“/",如果文件不存在,
Android會自動創(chuàng)建它。創(chuàng)建的文件保存在/data/data/<packagename>/files目錄,如:
/data/data/cn.itcast.action/files/itcast.txt,通過點(diǎn)擊Eclipse菜單”Window"-"ShowView"-"Other",
在對話窗口中展開android文件夾,選擇下面的FileExplorer視囪,然后在FileExplorer視圖中展開
/data/data/<packagename>/files目錄就可以看到該文件。
openFileOutput()方法的第二參數(shù)用于指定操作模式,有四種模式,分別為:
Context.MODE_PRIVATE=0
Context.MODE_APPEND=32768
Context.MODE_WORLD_READABLE=1
\Context.MODE_WORLD_WRITEABLE=2/
北京傳智播客教育
!播客一高級軟件人才實(shí)作培訓(xùn)專家!
使用文件進(jìn)行數(shù)據(jù)存儲
Context.MODE_PRIVATE:為默認(rèn)操作模式,代表該文件是私有數(shù)據(jù),只能被應(yīng)用本身訪問,在
該模式下,寫入的內(nèi)容會覆蓋原文件的內(nèi)容,如果想把新寫入的內(nèi)容追加到原文件中??梢允褂?/p>
Context.MODE_APPEND
Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內(nèi)容,否則就創(chuàng)建新文
件。一
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應(yīng)
用是否有權(quán)限畫該文件二——
MODE_WORLD_READABLE:表示當(dāng)前文件可以被其他應(yīng)用讀??;
MODE_WORLD_WRITEABLE:表示當(dāng)前文件可以被其他應(yīng)用寫入。
如果希,文件被真他應(yīng)用讀和寫,可以傳入:
openFileOutputCitcast.txt",Context.MODE_WORLD_READABLE+
Context.MODE_WORLD_WRITEABLE);
android有一套自己的安全模型,當(dāng)應(yīng)用程序(.apk)在安裝時系統(tǒng)就會分配給他一個userid,當(dāng)該應(yīng)
用要去訪問其他資源比如文件的時候,就需要userid匹配。默認(rèn)情況下,任何應(yīng)用創(chuàng)建的文件,
sharedpreferences,數(shù)據(jù)庫都應(yīng)該是私有的(位于/data/data/<packagename>/files),其他程序
無法訪問。除非在創(chuàng)建時指定了Context.MODE_WORLD_READABLE或者
Context.MODE_WORLD_WRITEABLE,只有這樣其他程序才能正確訪問。
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
讀取文件內(nèi)容
如果要打開存放在/data/data/<packagename>"iles目錄應(yīng)用私有的文件,可以使用Activity提供
openFilelnput()方法。
FileinputstreaminStream=this.getContext().openFilelnput("itcast.txt");
Log.i("FileTest",readlnStream(inStream));
readlnStream()的方法請看本頁下面?zhèn)渥ⅰ?/p>
或者直接使用文件的絕對路徑:
Filefile=newFile("/data/data/cn.itcast.action/files/itcast.txt");
FileinputstreaminStream=newFilelnputStream(file);
Log.i("FileTest",readlnStream(inStream));
注意:上面文件路徑中的“cn.itcast.action”為應(yīng)用所在包,當(dāng)你在編寫代碼時應(yīng)替換為你自己應(yīng)用
使用的包。
對于私有文件只能被創(chuàng)建該文件的應(yīng)用訪問,如果希望文件能被其他應(yīng)用讀和寫,可以在創(chuàng)建文
件時,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE權(quán)限。
Activity還提供了getCacheDir()和getFilesDir()方法:
getCacheDir()方法用于獲取/data/data/<packagename>/cache目錄
\getFilesDir()方法用于獲取/data/data/<packagename>/files目錄)
北京傳智播客教育
傳智播客一高級軟件人才實(shí)作培訓(xùn)專家!
把文件存放在SDCard
使用Activity的openFileOutput()方法保存文件,文件是存放在手機(jī)空間上,一般手機(jī)的存儲空間不是很大,
存放些小文件還行,如果要存放像視頻這樣的大文件,是不可行的。對于像視頻這樣的大文件,我們可
以把它存放在SDCard。SDCard是干什么的?你可以把它看作是移動硬盤或U盤。
在模擬器中使用SDCard,你需要先創(chuàng)建一張SDCard卡(當(dāng)然不是真的SDCard,只是鏡像文件)。創(chuàng)建
SDCard可以在Eclipse創(chuàng)建模擬器時隨同創(chuàng)建,也可以使用DOS命令進(jìn)行創(chuàng)建,如下:
在Dos窗口中進(jìn)入androidSDK安裝路徑的tools目錄,輸入以下命令創(chuàng)建一張容量為2G的SDCard,文件
后綴可以隨便取,建議使用.img:
mksdcard2048MD:\AndroidTool\sdcard.img
在程序中訪問SDCard,你需要申請?jiān)L問SDCard的權(quán)限。Adapter
在AndroidManifest.xml中加入訪問SDCard的權(quán)限如下:
<!-在SDCard中創(chuàng)建與刪除文件權(quán)限-->
<uses-permissionandroid:name="androicl.permission.MOUNT_UNMOUNT_FILESYSTEMS7>
<!--往SDCard寫入數(shù)據(jù)權(quán)限->
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE7>
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家!:
把文件存放在SDCard
要往SDCard存放文件,程序必須先判斷手機(jī)是否裝有SDCard,并且可以進(jìn)行讀寫。
注意:訪問SDCard必須在AndroidManifest.xml中加入訪問SDCard的權(quán)限
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
FilesdCardDir=Environment.getExternalStorageDirectory();〃獲取SDCard目錄
FilesaveFile=newFile(sdCardDir,"itcast.txt");
FileOutputStreamoutStream=newFileOutputStream(saveFile);
outStream.write("傳智播客".getBytes());
outStream.close();
)
Environment.getExternalStorageState()方法用于獲取SDCard的狀態(tài),如果手機(jī)裝有SDCard,并
且可以進(jìn)行讀寫,那么方法返回的狀態(tài)等于Environment.MEDIA_MOUNTED。
Environment.getExternalStorageDirectory()方法用于獲取SDCard的目錄,當(dāng)然要獲取SDCard的
目錄,你也可以這樣寫:
FilesdCardDir=newFile("/mnt/sdcard");〃獲取SDCard目錄
FilesaveFile=newFile(sdCardDir,"itcast.txt");
〃上面兩句代碼可以合成一句:FilesaveFile=newFile(7mnt/sdcard/itcast.txt");
FileOutputStreamoutStream=newFileOutputStream(saveFile);
outStream.write("傳智播客test”.getBytes。);
outStream.close();
北京傳智播客教育
廣傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
使用SAX或者DOM或者pull解析XML文件
在Android平臺上可以使用SimpleAPIforXML(SAX)>DocumentObjectModel(DOM)和Android附帶的
pull解析器解析XML文件。下面是本例子要解析的XML文件:
文件名稱:itcast.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<persons>
<personid="23">
<name>liming</name>
<age>30</age>
</person>
<personid="20">
<name>zhangxiaoxiao</name>
<age>25</age>
</person>
</persons>
,例子定義了一個javabean用于存放上面解析出來的xm吶容,這個javabean為Person,代碼請見本頁下面
\備注:J
北京傳智播客教育
廠傳智播客—高級軟件人才實(shí)作培訓(xùn)專家!:
使用SAX讀取XML文件
SAX是一個解析速度快并且占用內(nèi)存少的xml解析器,非常適合用于-Android等移動設(shè)備。SAX解析XML文件
采用的是事件驅(qū)動,也就是說,它并不需要解析完整個文檔,在按內(nèi)容順序解析文檔的過程中,SAX會判斷
當(dāng)前讀到的字符是否合法XML語法中的某部分,如果符合就會觸發(fā)事件。所謂事件,其實(shí)就是一些回調(diào)
(callback)方法,這些方法(事件淀義在ContentHandler接口。下面是一些ContentHandler接口常用的方法:
startDocument()
當(dāng)遇到文檔的開頭的時候,調(diào)用這個方法,可以在其中做一些預(yù)處理的工作。
endDocument()
和上面的方法相對應(yīng),當(dāng)文檔結(jié)束的時候,調(diào)用這個方法,可以在其中做一些善后的工作。
startElement(StringnamespacellRI,StringlocalName,StringqName,Attributesatts)
當(dāng)讀到一個開招標(biāo)簽的時候,會觸發(fā)這個方法。namespaceURI就是命名空間,localName是不帶命名空間
前綴的標(biāo)簽名,qName是帶命名空間前綴的標(biāo)簽名。通過atts可以得到所有的屬性名和相應(yīng)的值。要注意的
是SAX中一個重要的特點(diǎn)就是它的流式處理,當(dāng)遇到一個標(biāo)簽的時候,它并不會紀(jì)錄下以前所碰到的標(biāo)簽,
也就是說,在startElement()方法中,所有你所知道的信息,就是標(biāo)簽的名字和屬性,至于標(biāo)簽的嵌套結(jié)構(gòu),
上層標(biāo)簽的名字,是否有子元屬等等其它與結(jié)構(gòu)相關(guān)的信息,都是不得而知的,都需要你的程序來完成。這
使得SAX在編程處理上沒有DOM來得那么方便。
endElement(Stringuri,StringlocalName,Stringname)
這個方法和上面的方法相對應(yīng),在遇到結(jié)束標(biāo)簽的時候,調(diào)用這個方法。
characters(char[]ch,intstart,intlength)
這個方法用來處理在XML文件中讀到的內(nèi)容,第一個參數(shù)為文件的字符串內(nèi)容,后面兩個參數(shù)是讀到的字符
史衽這個數(shù)組中的起始位置和長度,使用newString(ch,start,length,就可以獲取內(nèi)容。>
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
使用SAX讀取XML文件
只要為SAX提供實(shí)現(xiàn)ContentHandler接口的類,那么該類就可以得到通知事件(實(shí)際上就是SAX調(diào)用了該
類中的回調(diào)方法)。因?yàn)镃ontentHandler是一個接口,在使用的時候可能會有些不方便,因此,SAX還為
其制定了一個Helper類:DefaultHandler,它實(shí)現(xiàn)了ContentHandler接口,但是其所有的方法體都為空,在
實(shí)現(xiàn)的時候,你只需要繼承這個類,然后重寫相應(yīng)的方法即可。使用SAX解析itcast.xml的代碼如下:
publicstaticList<Person>readXML(lnputStrearr)inStream){
try{
SAXParserFactoryspf=SAXParserFactory.newlnstance();
SAXParsersaxParser=spf.newSAXParser();//創(chuàng)建解析器
//設(shè)置解析器的相關(guān)特性,/sax/features/namespaces=true表示開啟命名空間特性
//saxParser.setProperty("/sax/features/namespaces",true);
XMLContentHandlerhandler=newXMLContentHandler();
saxParser.parse(inStream,handler);
inStream.close();
returnhandler.getPersons();
}catch(Exceptione){
e.printStackTrace();
}
returnnull;
)
SAX支持已內(nèi)置至WDK1.5中,你無需添加任何的jar文件。關(guān)于XMLContentHandler的代碼實(shí)現(xiàn)請看本頁下
面?zhèn)渥ⅰ?/p>
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
使用DOM讀取XML文件
除了使用SAX可以解析XML文件,大家也可以使用熟悉的DOM來解析XML文件。DOM解析XML文件時,
會將XML文件的所有內(nèi)容以文檔樹方式存放在內(nèi)存中,然后允許您使用DOMAPI遍歷XML樹、檢索所需的
數(shù)據(jù)。使用DOM操作XML的代碼看起來是比較直觀的,并且在編碼方面比基于SAX的實(shí)現(xiàn)更加簡單。但是,
因?yàn)镈OM需要將XML文件的所有內(nèi)容以文檔樹方式存放在內(nèi)存中,所以內(nèi)存的消耗比較大,特別對于運(yùn)行
Android的移動設(shè)備來說,因?yàn)樵O(shè)備的資源比較寶貴,所以建議還是采用SAX來解析XML文件,當(dāng)然,如果
XML文件的內(nèi)容比較小采用DOM也是可行的。
代碼請看本頁下方備注
北京傳智播客教育
(傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
使用Pull解析器讀取XML文件
除了可以使用SAX或DOM解析XML文件之外,大家也可以使用Android內(nèi)置的Pull解析器解析
XML文件。Pull解析器是一個開源的java項(xiàng)目,既可以用于android,也可以用于JavaEE。如
果用在javaEE需要把其jar文件放入類路徑中,因?yàn)锳ndroid已經(jīng)集成進(jìn)了Pull解析器,所以無
需添加任何jai■文件。android系統(tǒng)本身使用到的各種xml文件,其內(nèi)部也是采用Pull解析器進(jìn)行
解析的。Pull解析器的運(yùn)行方式與SAX解析器相似。它提供了類似的事件,如:開始元素和
結(jié)束元素事件,使用parser.next()可以進(jìn)入下一個元素并觸發(fā)相應(yīng)事件。跟SAX不同的是,
Pull解析器產(chǎn)生的事件是一個數(shù)字,而非方法,因此可以使用一個sw計(jì)ch對感興趣的事件進(jìn)行
處理。當(dāng)元素開始解析時,調(diào)用parser.nextText()方法可以獲取下一個Text類型節(jié)點(diǎn)的值。
使用Pull解析器讀取itcast.xml的代碼在本頁下方備注
Puii解析器的源碼及文檔下載網(wǎng)址:/xmlpull-website/impls.shtml
北京傳智播客教育
廣傳智播客一高級軟件人才實(shí)作培訓(xùn)專家?。?/p>
使用Pull解析器生成XML文件
有些時候,我們需要生成一個XML文件,生成XML文件的方法有很多,如:可以只使用一個StringBuilder
組拼XML內(nèi)容,然后把內(nèi)容寫入到文件中;或者使用DOMAPI生成XML文件,或者也可以使用pull解析器
生成XML文件,這里推薦大家使用Pull解析器。
使用Pull解析器生成一個與itcast.xml文件內(nèi)容相同的myitcast.xml文件,代碼在本頁下方備注
使用代碼如下(生成XML文件):
FilexmlFile=newFile("myitcast.xml");
FileOutputStreamoutStream=newFileOutputStream(xmlFile);
OutputStreamWriteroutStreamWriter=newOutputstreamWriter(outStream,"UTF-8");
BufferedWriterwriter=newBufferedWriter(outStreamWriter);
writeXML(persons,writer);
writer.flush();
writer.close();
如果只想得到生成的xml字符串內(nèi)容,可以使用Stringwriter:
StringWriterwriter=newStringWriter();
writeXML(persons,writer);
\Stringcontent=writer.toString();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年設(shè)備借款擔(dān)保合同
- 設(shè)備進(jìn)場驗(yàn)收登記制度(4篇)
- 范進(jìn)中舉課本劇
- 2025賓館公共區(qū)域綠化養(yǎng)護(hù)與美化合同3篇
- 2024年設(shè)計(jì)服務(wù)外包合同范本版B版
- 2024養(yǎng)老院老年文化娛樂活動合作協(xié)議3篇
- 2024版:某科技公司與某政府部門之間關(guān)于智慧城市建設(shè)技術(shù)服務(wù)的合同
- 2024年軟件知識產(chǎn)權(quán)許可與全球市場拓展協(xié)議2篇
- 麗水學(xué)院《中西醫(yī)結(jié)合實(shí)驗(yàn)診斷研究》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南有色金屬職業(yè)技術(shù)學(xué)院《外科》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年手術(shù)室?guī)Ы坦ぷ饔?jì)劃樣本(5篇)
- 一年級數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)匯編
- 保安服務(wù)招投標(biāo)書范本(兩篇)2024
- 遼寧省沈陽市五校協(xié)作體2024-2025學(xué)年高二上學(xué)期11月期中考試語文試題(含答案)
- 算法分析與設(shè)計(jì)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 保密知識培訓(xùn)
- 2024醫(yī)療器械質(zhì)量管理制度
- 江西省穩(wěn)派教育2025屆數(shù)學(xué)高二上期末教學(xué)質(zhì)量檢測模擬試題含解析
- 八年級歷史上冊(部編版)第六單元中華民族的抗日戰(zhàn)爭(大單元教學(xué)設(shè)計(jì))
- 2022-2023學(xué)年北京市海淀區(qū)高二(上)期末英語試卷(含答案解析)
- 2021-2022學(xué)年統(tǒng)編本五四制道德與法治五年級上冊期末檢測題及答案(共6套)
評論
0/150
提交評論