基于Android的智能手機遠程監(jiān)控軟件畢業(yè)設(shè)計說明書(論文)
JIANGSU UNIVERSITY OF TECHNOLOGY 本科畢業(yè)設(shè)計(論文)基于Android的智能手機遠程監(jiān)控軟件學(xué)院名稱: 電氣信息工程學(xué)院 專 業(yè): 通信工程 班 級: 09通信2W 學(xué) 號: 09313218 姓 名: 指導(dǎo)教師姓名: 指導(dǎo)教師職稱: 二一三 年 六 月 基于Android的智能手機遠程監(jiān)控軟件 The Design of remote monitoring software based on Android smartphones I江蘇理工學(xué)院畢業(yè)設(shè)計說明書(論文)目 錄摘 要IAbstractI緒 論2第1章 課題分析與方案論證31.1 課題任務(wù)分析31.2 方案論證3第2章 硬件電路62.1 CDMA網(wǎng)關(guān)模塊硬件設(shè)計62.2 電源電路72.3 LED燈指示電路72.4 CDMA2000網(wǎng)關(guān)UART接口電路72.5網(wǎng)關(guān)模塊PCB設(shè)計8第3章 軟件設(shè)計93.1 CDMA終端監(jiān)控節(jié)點軟件設(shè)計流程圖93.2 Android平臺監(jiān)控軟件設(shè)計流程圖103.3 Android監(jiān)控軟件詳細設(shè)計與實現(xiàn)113.3.1 登錄界面設(shè)計與實現(xiàn)113.3.2 地址配置界面設(shè)計與實現(xiàn)143.3.3 顯示界面設(shè)計與實現(xiàn)173.3.4 控制界面設(shè)計與實現(xiàn)19第4章 軟件調(diào)試214.1 非代碼部分調(diào)試214.1.1 JAVA環(huán)境配置214.1.2 Android模擬器214.1.3 系統(tǒng)剩余空間224.2 代碼部分調(diào)試224.2.1 活動注冊224.2.2 安裝軟件234.2.3 授權(quán)問題244.2.4 讀卡24附件1 英中翻譯Androdi平臺介紹25Android 2.3.4 Platform25安卓平臺2.3.430附件2 部分Android應(yīng)用程序36參考文獻48致 謝49江蘇理工學(xué)院畢業(yè)設(shè)計說明書(論文)緒 論Android是Google發(fā)布的一款基于Linux核心的手機操作系統(tǒng),Android是一種開源的、免費的移動計算軟件平臺,目前基于Android智能手機的用戶數(shù)量眾多。在智能手機操作系統(tǒng)中市場占有率最高。Android平臺最大的優(yōu)勢就是其開放性,開放的平臺允許任何移動終端廠商加入到Android聯(lián)盟中來。顯著的開放性可以使其擁有更多的開發(fā)者,隨著用戶和應(yīng)用的日益豐富,一個嶄新的平臺也將很快走向成熟。豐富的硬件,這一點還是與Android平臺的開放性相關(guān),由于Android的開放性,眾多的廠商會推出千奇百怪,功能特色各具的多種產(chǎn)品。功能上的差異和特色, 卻不會影響到數(shù)據(jù)同步、甚至軟件的兼容。本課題是基于Android智能手機進行遠程監(jiān)控程序及其硬件監(jiān)控終端開發(fā)的。移動性強 ,真正做到隨時隨地為用戶提供服務(wù)。本說明書共分為4章,第一章課題分析與方案論證;第二章對監(jiān)控終端硬件進行了說明;第三章對詳細的對應(yīng)用軟件進行了分析;第四章有針對性的列舉了Android應(yīng)用軟件在調(diào)試過程中出現(xiàn)的問題,并對問題作出了分析。設(shè)計的最終成果是能通過Android智能手機顯示遠程終端傳來的數(shù)據(jù),并通過指令實現(xiàn)對遠程終端的控制。 第1章 課題分析與方案論證1.1 課題任務(wù)分析 本課題主要實現(xiàn)用Android智能手機顯示遠程監(jiān)控終端傳來的數(shù)據(jù),并通過指令實現(xiàn)對遠程終端的控制。谷歌公司為了方便用戶Android平臺上開發(fā)軟件,使用了使用人數(shù)最多的JAVA語言作為主要的開發(fā)語言,開發(fā)環(huán)境是IBM開發(fā)的開源軟件Ecplise。在開發(fā)Android應(yīng)用軟件軟件之前,需要首先配置好開發(fā)環(huán)境,這其中包括Eclipse軟件下載(免安裝),JAVA虛擬機的安裝,android開發(fā)包SDK的下載并作為插件添加到Eclipse中。運用實驗室的CDMA終端模塊,該模塊通過GPRS網(wǎng)絡(luò)發(fā)送數(shù)據(jù)給具有良好移動性的Android手機,Android手機將接收到的數(shù)據(jù)處理后顯示出來,通過GPRS網(wǎng)絡(luò)發(fā)送指令給終端模塊從而控制終端模塊。本設(shè)計研究并實現(xiàn)了通過無線設(shè)備獲取遠程終端監(jiān)測信息。研究內(nèi)容主要包括Android的系統(tǒng)架構(gòu)、應(yīng)用開發(fā)環(huán)境建立、智能手機遠程監(jiān)控應(yīng)用軟件開發(fā)、遠程監(jiān)控網(wǎng)關(guān)軟硬件設(shè)計。模塊軟件功能上包括:用戶根據(jù)需要進行數(shù)據(jù)檢測、接口選擇與配置;設(shè)備地址配置。基于應(yīng)用的Android遠程監(jiān)控管理軟件用于監(jiān)控遠程基站的溫濕度環(huán)境。實現(xiàn)對遠程基站檢測節(jié)點終端的溫度、濕度等狀態(tài)參數(shù)的收集與管理。軟件運行環(huán)境是Android2.2操作系統(tǒng)及其以上版本。具有掉電后臺數(shù)據(jù)保護功能,適當修改可被廣泛用于監(jiān)測和管理遠程數(shù)據(jù)終端。1.2 方案論證 盡管沒有在課堂上系統(tǒng)的學(xué)習(xí)過JAVA語言及Android軟件開發(fā)技能,但是由于JAVA語言設(shè)計的比C+簡潔的很多,在有C語言的基礎(chǔ)上自學(xué)JAVA語言,難度不是很大,谷歌為了推廣Android,不但推出了便于使用的SDK開發(fā)包,還編寫了大量幫助文檔,同時也給出了一定數(shù)量的使用示例源代碼,結(jié)合實驗室的CDMA終端模塊,通過價格合適的GPRS網(wǎng)絡(luò)傳送數(shù)據(jù)。本次方案論證主要對數(shù)據(jù)傳送方式的選擇。方案一:1. Android手機收發(fā)數(shù)據(jù)方案選用通用的短信方式收發(fā)數(shù)據(jù),根據(jù)特定的數(shù)據(jù)協(xié)議,從接收到的短信中提取數(shù)據(jù),經(jīng)過處理去掉數(shù)據(jù)中的控制部分,將相關(guān)的監(jiān)測數(shù)據(jù)提取出來,在應(yīng)用程序界面上給予顯示,同時通過短信的方式,按照數(shù)據(jù)傳輸協(xié)議,以規(guī)定的方式傳送控制指令到CDMA控制終端。2. CDMA監(jiān)控終端收發(fā)數(shù)據(jù)方案通過的短信方式收發(fā)數(shù)據(jù),間歇性質(zhì)的采集周圍環(huán)境的溫濕度數(shù)據(jù),根據(jù)數(shù)據(jù)傳輸協(xié)議,將采集到的數(shù)據(jù)按照特定的格式,通過短信的方式傳輸數(shù)據(jù)給Android智能手機。同時根據(jù)特定的數(shù)據(jù)協(xié)議,從接收到的短信中提取數(shù)據(jù),經(jīng)過處理去掉數(shù)據(jù)中的控制部分,得到Android智能手機發(fā)送的控制指令,根據(jù)指令的內(nèi)容做出相關(guān)的反應(yīng)。方案二:1. Android手機收發(fā)數(shù)據(jù)方案選用網(wǎng)絡(luò)的方式收發(fā)數(shù)據(jù),購買一個固定的IP地址,在某個可以聯(lián)入網(wǎng)絡(luò)的設(shè)備上開發(fā)一款服務(wù)器軟件(比如PC),該服務(wù)器軟件具有的功能是儲存相關(guān)設(shè)備的IP地址,并且相關(guān)設(shè)備可以通過該服務(wù)器軟件系統(tǒng)查詢其他設(shè)備的IP地址。在Android手機聯(lián)入網(wǎng)絡(luò)的時候,可以得到一個隨機的IP地址,Android手機向具有固定IP地址的設(shè)備匯報自身的IP地址,并且查詢CDMA監(jiān)控終端的IP地址。查詢成功后,嘗試基于IP地址的通信,嘗試成功后,即可進行通信。根據(jù)特定的數(shù)據(jù)協(xié)議,從信息中提取數(shù)據(jù),經(jīng)過處理去掉數(shù)據(jù)中的控制部分,將相關(guān)的監(jiān)測數(shù)據(jù)提取出來,在應(yīng)用程序界面上給予顯示,同時IP通信方式,按照數(shù)據(jù)傳輸協(xié)議,以規(guī)定的方式傳送控制指令到CDMA控制終端。2. CDMA監(jiān)控終端收發(fā)數(shù)據(jù)方案在CDMA監(jiān)控終端接入網(wǎng)絡(luò)的時候,可以得到一個隨機的IP地址,CDMA監(jiān)控終端向具有固定IP地址的設(shè)備匯報自身的IP地址,等待其余設(shè)備接入請求,接收到請求后,嘗試基于IP地址的通信,嘗試成功后,間歇性質(zhì)的采集周圍環(huán)境的溫濕度數(shù)據(jù),根據(jù)數(shù)據(jù)傳輸協(xié)議,將采集到的數(shù)據(jù)按照特定的格式,通過基于IP的通信方式方式傳輸數(shù)據(jù)給Android智能手機。同時根據(jù)特定的數(shù)據(jù)協(xié)議,從接收到數(shù)據(jù)中,去掉數(shù)據(jù)中的控制數(shù)據(jù),得到Android智能手機發(fā)送的控制指令,根據(jù)指令的內(nèi)容做出相關(guān)的反應(yīng)。 綜合上述兩種方案,區(qū)別在于所傳輸數(shù)據(jù)的方式不同。方案一:選用通用通用的短信方式傳送數(shù)據(jù),優(yōu)點是初期開發(fā)難度、工作量較小,成本低廉。缺點是傳輸數(shù)據(jù)所需要的費用,短信是按條數(shù)收費,比起IP采用流量計費的方式要貴。方案二:采用基于IP的方式收發(fā)數(shù)據(jù),優(yōu)點是符合現(xiàn)代的通信潮流,比起短信是按條數(shù)收費方式,IP采用流量計費的方式要便宜。缺點是初期開發(fā)難度、工作量均較大,需要投入的硬件成本也高昂。通過比較我發(fā)現(xiàn),第一種方案軟、硬較第二種方案簡單,易于開發(fā)實現(xiàn),且充分利用了Android本身自帶的資源,節(jié)約了成本。為此,我采用第二種方案。第2章 硬件電路設(shè)計一種合適的GPRS網(wǎng)關(guān)的模塊,該模塊具有無線收發(fā)數(shù)據(jù)的能力。研究內(nèi)容主要包括Android軟件監(jiān)控平臺的設(shè)計,CDMA無線監(jiān)控節(jié)點模塊軟件件接口設(shè)計、自定義傳輸協(xié)議設(shè)計。軟件設(shè)計功能上包括:用戶根據(jù)需要進行設(shè)備地址配置;連網(wǎng)與數(shù)據(jù)傳輸。2.1 CDMA網(wǎng)關(guān)模塊硬件設(shè)計GPRS網(wǎng)關(guān)模塊硬件以CDMA2000為處理器模塊或高功率模塊為核心,RS232、RS485作為用戶設(shè)備接口,方便嵌入到用戶設(shè)備中。圖2-1 CDMA模塊硬件設(shè)計圖2.2 電源電路 (1)CDMA2000網(wǎng)關(guān)模塊電源設(shè)計 圖2-2 CDMA2000網(wǎng)關(guān)模塊電源電路CDMA2000電源電路如圖 2-2 所示。 CC2530模塊的工作電壓為9V,選用穩(wěn)壓芯片進行電壓變換。2.3 LED燈指示電路圖2-3 LED燈指示電路LED電路如圖5所示。LED1作為電源指示燈,有硬件確定。LED2和LED3由接收到的指令控制亮滅。2.4 CDMA2000網(wǎng)關(guān)UART接口電路通過UART串口電路與電腦進行數(shù)據(jù)傳輸,通過電腦的屏幕顯示硬件工作狀態(tài),從而方便調(diào)試,在實際工作中不需要用到這個部分。圖2-4 UART接口電路2.5網(wǎng)關(guān)模塊PCB設(shè)計 (1)CDMA2000網(wǎng)關(guān)模塊PCB圖圖2-5 GPRS網(wǎng)關(guān)PCB圖根據(jù)CDMA2000網(wǎng)關(guān)模塊的原理圖,繪制出網(wǎng)關(guān)模塊 PCB 圖,如圖2-4 所示。第3章 軟件設(shè)計在本章中,給出了CDMA終端監(jiān)控節(jié)點軟件設(shè)計流程圖,給出了Android平臺監(jiān)控軟件設(shè)計流程圖,考慮到側(cè)重點問題,詳細的說明了Android平臺監(jiān)控軟件的設(shè)計。3.1 CDMA終端監(jiān)控節(jié)點軟件設(shè)計流程圖圖3-1 CDMA終端監(jiān)控節(jié)點軟件設(shè)計流程圖CDMA終端監(jiān)控節(jié)點上電后首先對電路進行初始化處理,讀取用戶信息,讀取成功后不斷的嘗試接入GPRS網(wǎng)絡(luò),聯(lián)網(wǎng)成功后,判斷有無指令通過GPRS網(wǎng)絡(luò)傳來,若有,指令A(yù)android只能手機傳送來的指令;接著查看定時3秒時間是否已到,如果3秒已到,讀取溫濕度信息,讀取成功后,通過GPRS網(wǎng)絡(luò)傳送給Android智能手機,由Android只能手機負責信息的顯示。3.2 Android平臺監(jiān)控軟件設(shè)計流程圖圖3-2 Android平臺監(jiān)控軟件工作流程圖Android軟件開啟后,輸入正確的用戶名和密碼,可以登錄系統(tǒng),在系統(tǒng)中可以配置監(jiān)控終端信息,可以通過此軟件發(fā)送信息控制終端平臺,終端平臺每隔三秒鐘發(fā)送信息給手機,手機通過監(jiān)控平臺將信息顯示出來。3.3 Android監(jiān)控軟件詳細設(shè)計與實現(xiàn)3.3.1 登錄界面設(shè)計與實現(xiàn)進入登錄畫面,在這一過程中用戶輸入相關(guān)的個人賬戶信息,輸入完成后點擊登錄按鈕或者點擊修改按鈕,進入相關(guān)的界面。如果用戶的個人信息連續(xù)輸入錯誤次數(shù)超過3次,軟件自動退出。圖3-3 登錄界面在上述圖標中如果輸入用戶名和密碼正確,并且選擇修改密碼選項。進入修改密碼界面。如果兩次輸入的密碼都正確,返回到重新登錄界面。以新的配置信息登錄。如果連續(xù)3次輸入兩個表格中的輸入不一致,退出程序。關(guān)鍵代碼如下:/登錄 class loginButtonListener implements OnClickListener int namePosition,passwdPosition; /存儲用戶名和密碼的索引 /生成該類的對象,并將其注冊到控件上。如果該控件被用戶按下,就會執(zhí)行onClick方法 Overridepublic void onClick(View v) String username = usernameEdit.getText().toString();String userpasswd = userpasswordEdit.getText().toString();if(loginTimes>=3)/如果輸入次數(shù)不低于3次,結(jié)束。finish();/搜索是否存在username字符串,-1表示沒有。 if( username.length()!=0&&userpasswd.length()!=0&&(namePosition = pass.indexOf(username) ) >= 0 &&( passwdPosition = pass.indexOf(userpasswd) )>=0 &&( namePosition + username.length() = passwdPosition ) ) Intent intent = new Intent();/設(shè)置Intent對象要啟動的Activityintent.setClass(login.this, SMSReceviedProjectActivity.class);/通過Intent對象啟動另外一個Activitylogin.this.startActivity(intent);/注銷這個Activityfinish(); elseToast.makeText(login.this, "輸入用戶名或密碼有誤", Toast.LENGTH_SHORT).show();loginTimes+; 用戶可以在登錄的時候,選擇是否修改用戶名和密碼。圖3-4 修改界面修改成功后,使用新的用戶名和密碼登錄。關(guān)鍵代碼如下:/修改用戶名或者密碼public class change extends Activityprivate TextView userpasswdChange=null;/新密碼private EditText userpasswdEditChange=null;private TextView userpasswdChange2=null;/第二次輸入新密碼private EditText userpasswdEditChange2=null;private Button okButton=null;/確認按鈕private Button cancelButton = null ; /取消修改int changeTimes = 0,loginTimes = 0;/記錄輸入次數(shù) /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.change); userpasswdChange=(TextView)findViewById(R.id.userpasswdChange); userpasswdEditChange=(EditText)findViewById(R.id.userpasswdEditChange); userpasswdChange2=(TextView)findViewById(R.id.userpasswdChange2); userpasswdEditChange2=(EditText)findViewById(R.id.userpasswdEditChange2); okButton=(Button)findViewById(R.id.okButton); okButton.setOnClickListener(new okButtonListener(); cancelButton=(Button)findViewById(R.id.cancelButton); cancelButton.setOnClickListener(new cancelButtonListener(); /確認 class okButtonListener implements OnClickListener /生成該類的對象,并將其注冊到控件上。如果該控件被用戶按下,就會執(zhí)行onClick方法 Overridepublic void onClick(View v) /測試使用,沒有在此處寫代碼。實際應(yīng)用中需寫入。 /取消 class cancelButtonListener implements OnClickListener /生成該類的對象,并將其注冊到控件上。如果該控件被用戶按下,就會執(zhí)行onClick方法 Overridepublic void onClick(View v) 3.3.2 地址配置界面設(shè)計與實現(xiàn)點擊新建按鈕新建地址信息,地址信息只有在此處輸入時,才會給予修改顯示顯示。個性化的配置地址信息,界面如下:圖3-5 修改地址信息關(guān)鍵代碼如下:public class AddressOperationDialog extends Dialog DbDataFactory dbDataFactory; /數(shù)據(jù)庫操作類AddressManagerActivity addressMangerActivity;EditText address;/地址EditText telnum; /電話號碼Button add; /添加按鈕Button cancel; /取消按鈕/記錄操作數(shù)據(jù)MyMessage mymessage;Help help;public AddressOperationDialog(Context context,MyMessage mymessage) super(context);/ TODO Auto-generated constructor stuthis.addressMangerActivity=(AddressManagerActivity) context;this.mymessage=mymessage;protected void onCreate(Bundle savedInstanceState) / TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.addressoperation); setTitle("添加地址信息"); /初始化 init();/初始化private void init() / TODO Auto-generated method stubhelp=new Help();dbDataFactory=new DbDataFactory();address=(EditText)findViewById(R.id.address); telnum=(EditText)findViewById(R.id.telnum); /判斷是操作還是修改 if(null!=mymessage) /更新的時候 將信息顯示到控件 address.setText(mymessage.getAddress(); telnum.setText(mymessage.getTelnum(); /號碼不可更改 cancel=(Button) findViewById(R.id.cancel);cancel.setOnClickListener(new Button.OnClickListener()public void onClick(View v) / TODO Auto-generated method stubdismiss(););add=(Button) findViewById(R.id.add);add.setOnClickListener(new Button.OnClickListener() public void onClick(View v) / TODO Auto-generated method stubif(isEmptyData()/空數(shù)據(jù)給出提示help.ToastMessage(addressMangerActivity, R.string.emptydata, 2000);else/不是空數(shù)據(jù)MyMessage newMessage=null;Message msg=new Message();if(null=mymessage)/新增newMessage=getdata(0);msg.what=(int)dbDataFactory.addMyMessage(addressMangerActivity,newMessage );dismiss();else/更新newMessage=getdata(mymessage.get_id();dbDataFactory.updateMyMessage(addressMangerActivity,newMessage );dismiss();/回調(diào)addressMangerActivity的updateDataHandler 更新數(shù)據(jù)addressMangerActivity.updateDataHandler.sendMessage(msg););/獲取數(shù)據(jù)private MyMessage getdata(int id) / TODO Auto-generated method stubreturn new MyMessage(id, telnum.getText().toString(), address.getText().toString(),"");private boolean isEmptyData() / TODO Auto-generated method stubif(telnum.getText().toString().trim().length()!=0)&&(address.getText().toString().trim().length()!=0)return false;return true;3.3.3 顯示界面設(shè)計與實現(xiàn)軟件開啟并且配置后,顯示效果如下。從圖中可以看出,該應(yīng)用程序成功的顯示出了地點、溫濕度、時間等信息,達到了設(shè)計要求。圖3-6 監(jiān)控顯示關(guān)鍵代碼如下:public Handler smsShowHandler=new Handler() SuppressWarnings("unchecked")public void handleMessage(Message msg) /取消進度條 if(progressDialog.isShowing() progressDialog.cancel(); /顯示數(shù)據(jù) if(msg.what=0) / /狀態(tài)為0 表示沒有數(shù)據(jù)/ help.ToastMessage(SMSReceviedProjectActivity.this,R.string.nodata,2000); else /顯示數(shù)據(jù) String result="" myMessageList=(List<MyMessage>) msg.obj; List<MyStatus> mystatus=help.getMyStatus(myMessageList, SMSReceviedProjectActivity.this); for(int i=0;i<mystatus.size();i+) result+=mystatus.get(i).getAddress()+":<br/>"+ "|"+mystatus.get(i).getPower()+ "|"+mystatus.get(i).getWaterlevel()+ "|"+mystatus.get(i).getPump()+ "|<font color="#ff0000">"+mystatus.get(i).getStatus()+"</font><br/><br/>" tv_show.setText(Html.fromHtml(result); Thread thread = new Thread() Override public void run() int waitingTime = 5000; / ms try Thread.sleep(3000); catch (InterruptedException e) e.printStackTrace(); finally /查詢數(shù)據(jù)、線程啟動 smsInfoThread=new SMSInfoThread(SMSReceviedProjectActivity.this,myMessageList); smsInfoThread.start(); ; thread.start(); ; ;3.3.4 控制界面設(shè)計與實現(xiàn)點擊查詢后啟動查詢界面,用戶在第一個輸入框中輸入想查詢終端地址,在第二個輸入框中輸入指令(目前只支持兩種指令。指令格式是本機號+10001或者10000。比如本機號:12345678900,那么輸入指令是:1234567890011111。其中以10001結(jié)尾表示打開LED1,以10000結(jié)尾表示關(guān)閉LED1)。圖3-7 控制界面關(guān)鍵代碼如下:public boolean onCreateOptionsMenu(Menu menu) menu.add(0, 0, 0, "控制"); menu.add(0, 1, 1, "關(guān)于"); return super.onCreateOptionsMenu(menu); public boolean onOptionsItemSelected(MenuItem item) super.onOptionsItemSelected(item); switch(item.getItemId() case 0: search();/選擇“控制”選項 break; case 1: about();/選擇“關(guān)于”選項 break; return true; /轉(zhuǎn)入發(fā)送控制界面,本應(yīng)用中使用的是谷歌自帶的發(fā)送短信界面 private void search() Uri uri = Uri.parse("smsto:/0800000123"); Intent intent = new Intent(Intent.ACTION_SENDTO, uri); intent.putExtra("sms_body", "格式:本機號+11111"); startActivity(intent); 第4章 軟件調(diào)試Android系統(tǒng)是一個很復(fù)雜的操作系統(tǒng)。在開發(fā)應(yīng)用軟件的中,出現(xiàn)了各種各樣的問題,包括開發(fā)環(huán)境配置問題,開發(fā)語言使用問題,虛擬機不能模擬實際機器的問題。在本章中,將開發(fā)中遇到的一些錯誤羅列出來。4.1 非代碼部分調(diào)試4.1.1 JAVA環(huán)境配置 問題:在啟動Android開發(fā)平臺Eclipse時,出現(xiàn)如圖4-1所示錯誤提示:圖4-1 JAVA環(huán)境配置提示分析解決:由于Eclipse運行需要JAVA環(huán)境的支持,所以在運行Eclipse之前需要下載并且安裝一個JAVA虛擬機。當然其后的Android程序開發(fā),也用到了JAVA環(huán)境。4.1.2 Android模擬器 問題:在編寫好測試軟件時,遠行Android模擬器時,出現(xiàn)如圖4-2錯誤提示:圖4-2 Android模擬器提示分析解決:虛擬機沒設(shè)置好或者版本低與程序中設(shè)定的版本??梢栽赪indow- AVD Managernew,在彈出的對話框中輸入name信息,在target中選擇模擬器版本。考慮到使用到的API的級別(android各個平臺API的級別不同)和更廣泛的適用性(版本越低使用范圍越大),本文中選擇的是2.2版本。配置如圖4-3所示:圖4-3 Android模擬器配置4.1.3 系統(tǒng)剩余空間問題:在開發(fā)環(huán)境及虛擬機配置好后,仍不能啟動虛擬機,錯誤報告如下:2013-02-22 15:41:46 - Emulator NAND: could not write file C:DOCUME1ADMINI1LOCALS1TempAndroidEmulatorTMP162.tmp, No space left on device 分析解決:由于Android虛擬機較大,對系統(tǒng)盤有一定大要求,這兒因為系統(tǒng)盤不足,導(dǎo)致Android虛擬機無法啟動,建議系統(tǒng)盤預(yù)留1GB空閑空間用于Android開發(fā)。4.2 代碼部分調(diào)試4.2.1 活動注冊 問題:啟動Android模擬器后,點擊登錄的時候出現(xiàn)如圖4-3所示異常提示:圖4-3 Android異常提示上面的提示的很模糊,參考錯誤報告:圖4-4 Eclipse錯誤報告分析解決:圖中灰色部分給出了很明顯的提示,沒有發(fā)現(xiàn)可直接使用的“activity class”(找不到com.android.activity.login),在android開發(fā)中為了管理各個“界面”,需要在一個教“AndroidManifest.xml”的文件中注冊活動界面的login。4.2.2 安裝軟件問題:在使用Android手機調(diào)試的時候,出現(xiàn)如下的錯誤報告2013-05-22 22:46:59 - SMSReceviedProject Installing SMSReceviedProject.apk.2013-05-22 22:47:01 - SMSReceviedProject Re-installation failed due to different application signatures.2013-05-22 22:47:01 - SMSReceviedProject You must perform a full uninstall of the application. WARNING: This will remove the application data!2013-05-22 22:47:01 - SMSReceviedProject Please execute adb uninstall com.android.activity in a shell.2013-05-22 22:47:01 - SMSReceviedProject Launch canceled! 分析解決:因為在Android手機中手工安裝過了這個軟件,Android模擬器不能刪除已經(jīng)手工安裝的軟件。手動卸載后,重新運行即可。4.2.3 授權(quán)問題問題:在Android手機上運行軟件時,Ecplipse出現(xiàn)如圖4-4所示錯誤:圖4-5 Eclipse授權(quán)錯誤報告分析解決:由于安全問題,Android要求安裝運行的軟件必須在安裝的時候提示軟件所需得到的權(quán)利,用戶接收后才可獲得相關(guān)的權(quán)利。由于在設(shè)計軟件時,沒有在“AndroidManifest.xml”中聲明所需要的權(quán)利,導(dǎo)致軟件在使用一些權(quán)利時,被拒絕??梢栽凇癆ndroidManifest.xml”中聲明所需的權(quán)利,即可運用。4.2.4 讀卡問題:在輸入初始化的登錄名和密碼后,出現(xiàn)如圖圖4-6所示的異常報告:圖4-6 異常報告分析解決:由于在登錄的時候,需要讀寫“/SD”目錄下的數(shù)據(jù)。在手機上插入SD卡,即可正常的運行。附件1 英中翻譯Androdi平臺介紹Android 2.3.4 Platform API Level:10Android 2.3.4 is a maintenance release that adds several bug fixes and patches to the Android 2.3 platform, without any API changes from Android 2.3.3. Additionally, Android 2.3.4 brings support for the Open Accessory API to mobile devices, through the optional Open Accessory Library. For developers, the Android 2.3.4 platform and the Open Accessory Library are available together in the latest version of the Google APIs Add-On, a downloadable component for the Android SDK.To get started developing or testing against Android 2.3.4, use the Android SDK Manager to download the latest version of the Google APIs Add-On into your SDK. For more information, see Adding SDK Components. If you are new to Android, download the SDK Starter Package first.For a high-level introduction to Android 2.3, see the Platform Highlights.RevisionsThe sections below provide notes about successive releases of the Android 2.3.4 platform component for the Android SDK, as denoted by revision number. To determine what revision(s) of the Android 2.3.4 platforms are installed in your SDK environment, refer to the "Installed Packages" listing in the Android SDK and AVD Manager.API OverviewAndroid 2.3.4 provides the same framework API to applications as Android 2.3.3 (API level 10). For a summary of the API, see the Android 2.3.3 version notes.Open Accessory LibraryOpen Accessory is a new capability for integrating connected peripherals with applications running on the platform. The capability is based on a USB (Universal Serial Bus) stack built into the platform and an API exposed to applications. Peripherals that attach to Android-powered devices as accessories connect as USB hosts. Open Accessory is introduced in Android 3.1 (API level 12), but is made available to devices running Android 2.3.4 by means of an optional external library, the Open Accessory Library. The library exposes a framework API that lets applications discover, communicate with, and manage a variety of device types connected over USB. It also provides the implementation of the API against parts of the Android platform that are not directly exposed to applications in Android 2.3.4.The Open Accessory Library is optional on any given device. Device manufacturers may choose whether to include the Open Accessory Library in their products or exclude it. The library is forward-compatible with Android 3.1, so applications developed against Android 2.3.4 will run properly on devices running Android 3.1, if those devices support USB accessories. The API provided by the Open Accessory Library is based on the Open Accessory API provided in Android 3.1. In most areas, you can use the same techniques and APIs. However, developing for the Open Accessory Library on Android 2.3.4 differs from the standard USB API in these ways: l Obtaining a UsbManager object To obtain a UsbManager object when using the add-on library, use the helper method getInstance() rather than getSystemService() For example:UsbManager manager = UsbManager.getInstance(this);l Obtaining a UsbAccessory from a filtered intent When you filter for a connected device or accessory with an intent filter, the UsbAccessory object is contained inside the intent that is passed to your application. If you are using the add-on library, you can get the UsbAccessory object in the following manner:UsbAccessory accessory = UsbManager.getAccessory(intent);l No USB host support Android 2.3.4 and the Open Accessory Library do not support USB host mode (for example, through UsbDevice), although USB host mode is supported in Android 3.1. An Android-powered device running Android 2.3.4 can not function as a USB host. The library enables the Android-powered device to function as a peripheral only, with the connected accessory functioning as USB host (through UsbAccessory).To develop apps using