【正文】
其服務(wù) 程序 流程圖如圖 所示。 下面代碼為本應(yīng)用所有的權(quán)限注冊(cè)代碼 : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 usespermission android:name= / usespermission android:name= / usespermission android:name= / usespermission android:name= / usespermission android:name= / usespermission android:name= / usespermission android:name= / usespermission android:name= / usespermission android:name= / usespermission android:name= / usespermission android:name= / usespermission android:name= / usespermission android:name= / usespermission android:name= / usespermission android:name= / 在本軟件中遠(yuǎn)程控制手機(jī)就是通過此短信廣播接收機(jī)制實(shí)現(xiàn)的。 為了接收來自系統(tǒng)的廣播, Android 為開發(fā)者提供了一個(gè)專門 用于接收廣播的類既BroadcastReceiver 類,本軟件就通過繼承此類實(shí)現(xiàn)接收所有廣播。 手機(jī)系統(tǒng)中自帶的有些功能都要通過這種廣播來完成動(dòng)作。 服務(wù)狀態(tài)廣播也是同樣的原理,當(dāng)手機(jī)檢測(cè)到信號(hào)后就會(huì)由系統(tǒng)向所有應(yīng)用發(fā)送服務(wù)狀態(tài)改變的廣播。 開機(jī)完成廣播和服務(wù)狀態(tài)廣播用于監(jiān)測(cè) SIM 卡的狀態(tài)改變。所以,只有Function 的完美實(shí)現(xiàn)才能體現(xiàn)出一個(gè)軟件的真正價(jià)值。 由 Sever 支持的 Function 實(shí)現(xiàn) 有了完整的 UI,我們就可以在 Function 里實(shí)現(xiàn)這些 UI 對(duì)應(yīng)的功能 。 } 經(jīng)過大量的調(diào)整、核對(duì)以及調(diào)試,我們的 UI界面就這樣完成啦。 ()。 //顯示 Dialog界面 (view)。 //生成 Dialog對(duì)象并進(jìn)行設(shè)置 builder = new (this)。 創(chuàng) 建 一 個(gè) D i a l o g 方 法應(yīng) 用s e t O n C l i c kL i s t e n e r 綁定 監(jiān) 聽 器用戶點(diǎn)擊按鈕事件用inflate方法渲染調(diào)用layout等 待 用 戶 點(diǎn) 擊事 件NYL a y o u t主 框 架判 斷 點(diǎn) 擊 的 按鈕 是 Y / N判 斷 密 碼 是 否不 為 空判 斷 密 碼 與 原密 碼 是 否 一 致YY提示錯(cuò)誤信息退 出 應(yīng) 用 程 序N進(jìn) 入 應(yīng) 用 程 序NNY 圖 Dialog 流程圖 ? java 文件關(guān)鍵代碼如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 //首先先創(chuàng)建一個(gè) Dialog函數(shù) private void putPWDialog() { //渲染布局文件 LayoutInflater inflater = (this)。 本軟件就采用第二種方法用于顯示彈出的對(duì)話框。 二是在 Activity 的 onCreateDialog(int id)方法中創(chuàng)建 Dialog 對(duì)象并返回,然后調(diào)用 Activty 的 showDialog(int id)和 dismissDialog(int id)來顯示和隱藏對(duì)話框。 P r e f e r e n c e S c r e e ns h e z h i . x m lt i t l es u m m a r yC h e c k B o xP r e f e r e n c e t i t l es u m m a r yC h e c k B o xP r e f e r e n c e t i t l es u m m a r yC h e c k B o xP r e f e r e n c e d i a l o g T i t l es u m m a r yE d i t T e x tP r e f e r e n c ed i a l o g T i t l es u m m a r yE d i t T e x tP r e f e r e n c et i t l ek e yP o s i t i v eB u t t o n T e x tN e g a t i v eB u t t o n T e x tt i t l ek e yP o s i t i v eB u t t o n T e x tN e g a t i v eB u t t o n T e x t 圖 文件屬性構(gòu)架 其代碼就是對(duì)屬性進(jìn)行 相應(yīng) 配置即可 如 android:password=true等,這里就不做詳細(xì)介紹了,具體代碼請(qǐng)看附錄二。 圖 Preference 的布局文件 其 文件構(gòu)架如圖 所示。所以我們只需要在布局文件中按需求添加控件就可以了。當(dāng)然 Android 的設(shè)計(jì)者也考慮到了這點(diǎn),在系統(tǒng)中為我們提供了一個(gè)專門用于開發(fā)界面 設(shè)置的類 PreferenceActivity,這個(gè)類完美結(jié)合了 Activity與 Preference,很大程度的方便了我們的開發(fā),因此我們的 UI 功能設(shè)置界面就是通過繼承此類的類來實(shí)現(xiàn)。 因此當(dāng)我們?cè)诮缑嫔献鲈O(shè)置的時(shí)候自然就會(huì)想到 Activity+Preference 的組合,前者用于界面的構(gòu)造,后者用于設(shè)置數(shù)據(jù)的存放。 android:id=+id/android:list // scrollbars屬性為選擇滾動(dòng)條方向,這里我們定位垂直方向 。 (intent)。 // (textIntent,123)。 //覆寫 onListItemClick()方法獲得用戶點(diǎn)擊事件 Override protected void onListItemClick(ListView l, View v, int position, long id) { // TODO Autogenerated method stub (l, v, position, id)。 //生成 Adapter,并實(shí)現(xiàn)通過 setListAdapter()方法實(shí)現(xiàn) list SimpleAdapter listAdapter = new SimpleAdapter (this,list, new String[]{tiyan,jianjie,img}, new int[]{,})。 (img, )。 //向 Map中對(duì)應(yīng)位置裝入數(shù)據(jù), (tiyan, 定位手機(jī) )。 //建立一個(gè) HashMap放進(jìn) ArrayList中 ArrayListHashMapString,Object list =new ArrayListHashMapString,Object()。 //發(fā)報(bào)警音 private static final int huanka = 4。 //銷毀數(shù)據(jù) private static final int suoding = 2。下面以 UI 功能體驗(yàn)層為例 根據(jù)圖 的程序流程圖 分析下代碼: 創(chuàng) 建 T i y a n 類覆 寫 o n C r e a t e 方 法通 過S i m p l eA d a p t e r 裝入 數(shù) 據(jù)應(yīng) 用L i s t I t e m Cl i c k 綁 定監(jiān) 聽 器用戶點(diǎn)擊按鈕事件setContentView顯示界面等 待 用 戶 點(diǎn) 擊事 件NYL a y o u tL i s t 數(shù)據(jù) 框 架s t a r t A c t i v i t y 到d i n g w e iL a y o u t主 框 架s t a r t A c t i v i t y 到d i n g w e is t a r t A c t i v i t y 到d i n g w e is t a r t A c t i v i t y 到d i n g w e is t a r t A c t i v i t y 到d i n g w e is t a r t A c t i v i t y 到d i n g w e i012345 圖 體驗(yàn)功能 UI 流程圖 ? Java 文件 : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //首先我們的體驗(yàn)層要繼承 ListActivity public class Tiyan extends ListActivity //在這里設(shè)置各功能對(duì)應(yīng)的數(shù)值 private static final int dingwei = 0。 HashMap 就是一種 Map,在 Map 中數(shù)據(jù)都是以鍵值對(duì)的方式存在的,這樣,我們的數(shù)據(jù)最終在 List 中的存儲(chǔ)方式就是以鍵值對(duì)的形式存在的。在繼承 ListActivity 的類中要想顯示列表內(nèi)容就必須要調(diào)用setListAdapter(listAdapter)方法 ,在這個(gè)方法中需要傳進(jìn)一個(gè) listAdapter 參數(shù),這個(gè) Adapter 通常我們叫做適配器,我們要顯示出來的數(shù)據(jù)就儲(chǔ)存在這個(gè) listAdapter 當(dāng)中 。 圖 典型 的 ListView示意圖。 使用了 ListActivity 類后,如果整個(gè)屏幕上只需顯示一個(gè)列表,我們甚至可以把 setContentView 一行注釋掉,不用定義列表的 XML 說明文件。ListActivity 用來在屏幕中顯示一個(gè)列表,當(dāng)點(diǎn)擊 其 中的 某一列時(shí),可以觸發(fā)一些操作。如果所 用的組件需要權(quán)限但沒有在這個(gè)文件注冊(cè),應(yīng)用程序就會(huì)無(wú)法正常運(yùn)行。 L i n e a r L a y o u tL i n e a r L a y o u tR e l a t i v e L a y o u tL i n e a r L a y o u tT e x t V i e wT e x t V i e wT e x t V i e wT e x t V i e wT e x t V i e w E d i t T e x tL i n e a r L a y o u tT e x t V i e w E d i t T e x tL i n e a r L a y o u tT e x t V i e wT e x t V i e wT e x t V i e wB u t t o n B u t t o n 圖 layout 布局控件示意圖 ? 文件 : 為 Activity 提供布局支持的 layout 文件 是 UI 如何顯示的控制中心,這個(gè)文件里的控件屬性決定了控件的顯示位置, 圖 是 為 First 提供布局 控件的 layout 的示意圖,其 主要代碼如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //第一行定義了布局文件所鏈接數(shù)據(jù)庫(kù)的版本以及支持的語(yǔ)言, utf8為中文。 //指明跳轉(zhuǎn) Activity (, )。 //提交改動(dòng)到數(shù)據(jù)庫(kù)并保存 ()。 else if?? else{ //建立數(shù)據(jù)庫(kù)編輯對(duì)象 Editor editor = ()。 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 //用 findViewById的方法聲明并得到 Button控件 Button bt_sure = (Button)findViewById()。 初始化界面的整體設(shè)計(jì) 流程 圖如圖 所示。圖 為 Google 官方給出的 Activity 生命周期流程圖。其中在我們的軟件里用到了 ListActivity 和