<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    即興的靈感

    思維是一種藝術(shù); 藝術(shù)需要靈感。

    博客好友

    最新評(píng)論

    Android中實(shí)現(xiàn)GPS功能基礎(chǔ)開發(fā)實(shí)例

    當(dāng)開發(fā)式手機(jī)聯(lián)盟推出自己的Android手機(jī)雛形時(shí),受到了極大的追捧。Google為了鼓勵(lì)開發(fā)人員來開發(fā)Android手機(jī)的應(yīng)用程序,提供了1千萬美金來獎(jiǎng)勵(lì)那些在Android開發(fā)中的獲獎(jiǎng)?wù)摺.?dāng)然,本文并不是告訴讀者如何去贏得大獎(jiǎng),而是幫助讀者理解如何使用Android SDK來開發(fā)Android程序,其中包括如何使用XML布局來顯示廣西,從GPS組件中獲得設(shè)備的位置等,在本文的最后將學(xué)習(xí)如何將文本顯示在一個(gè)定制的視圖上。

        一、準(zhǔn)備工作
        要想開發(fā)Android程序,我們需要如下三種軟件:
        1. Eclipse
        2. Android SDK
        3. 開發(fā)Android程序的Eclipse插件

        為了開始我們的工作,首先要安裝Eclipse,然后從Google的網(wǎng)站獲得Android SDK,并且安裝Eclipse插件。

        二、Activity類
        每一種移動(dòng)開發(fā)環(huán)境都有自己的基類。如J2ME應(yīng)用程序的基類是midlets,BREW的基類是applets,而Android程序的基類是Activity。這個(gè)activity為我們提供了對(duì)移動(dòng)操作系統(tǒng)的基本功能和事件的訪問。這個(gè)類包含了基本的構(gòu)造方法,鍵盤處理,掛起來恢復(fù)功能,以及其他底層的手持設(shè)備的訪問。實(shí)質(zhì)上,我們的應(yīng)用程序?qū)⑹且粋€(gè)Activity類的擴(kuò)展。在本文中讀者將會(huì)通過例子學(xué)習(xí)到如何使用Activity類來編寫Android程序。下面是一個(gè)簡(jiǎn)單的繼承Activity的例子。

        public class LocateMe extends Activity{
           public void onCreate(Bundle params){
            super.onCreate(params);
            setContentView(R.layout.main);
          }
           public boolean onKeyDown(int keyCode, KeyEvent event){
            return true;
          }
        }

        在上面程序中的onCreate方法將在應(yīng)用程序第一次開始時(shí)調(diào)用。Bundle對(duì)象包含了任何用于建立參數(shù)或環(huán)境數(shù)據(jù)所需要的基本信息。Activity可以是全屏的,或是懸浮的。它們可以是嵌套的,但是每一部分基本是獨(dú)立的。那么,也許有人會(huì)問,setContentView是做什么的呢?

        三 View類
        View類是Android的一個(gè)超類,這個(gè)類幾乎包含了所有的屏幕類型。但它們之間有一些不同。每一個(gè)view都有一個(gè)用于繪畫的畫布。這個(gè)畫布可以用來進(jìn)行任意擴(kuò)展。本文為了方便起見,只涉及到了兩個(gè)主要的View類型:定義View和Android的XML內(nèi)容View。在上面的代碼中,使用的是“Hello World” XML View,它是以非常自然的方式開始的。
        如果我們查看一下新的Android工程,就會(huì)發(fā)現(xiàn)一個(gè)叫main.xml的文件。在這個(gè)文件中,通過一個(gè)簡(jiǎn)單的XML文件,描述了一個(gè)屏幕的布局。這個(gè)簡(jiǎn)單的xml文件的內(nèi)容如下:
        <?xml version=”1.0″ encoding=”utf-8″?>
        <RelativeLayout xmlns:android=”http://schemas.android.com/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:layout_centerHorizontal=”true”
        android:text=”Press the center key to locate yourself”
        />
        </RelativeLayout>

       上面的內(nèi)容的功能看起來非常明顯。這個(gè)特殊文件定義了一個(gè)相關(guān)的布局,這就意味著通過一個(gè)元素到另一個(gè)元素的關(guān)系或是它們父元素的關(guān)系來描述。對(duì)于視圖來說,有一些用于布局的方法,但是在本文中只關(guān)注于上述的xml文件。

        RealtiveLayout中包含了一個(gè)填充整個(gè)屏幕的文本框(也就是我們的LocateMe activity)。這個(gè)LocateMe activity在默認(rèn)情況下是全屏的,因此,文本框?qū)⒗^承這個(gè)屬性,并且文本框?qū)⒃谄聊坏淖笊辖秋@示。另外,必須為這個(gè)XML文件設(shè)置一個(gè)引用數(shù),以便Android可以在源代碼中找到它。在默認(rèn)情況下,這些引用數(shù)被保存在R.java中,代碼如下:
        public final class R{
          public static final class layout{
            public static final int main=0x7f030001;
           }
        }

        視圖也可以被嵌套,但和J2ME不同,我們可以將定制的視圖和Android團(tuán)隊(duì)發(fā)布的Widgets一起使用。在J2ME中,開發(fā)人員被迫選擇GameCanvas和J2ME應(yīng)用程序畫布。這就意味著如果我們想要一個(gè)定制的效果,就必須在GameCanvas上重新設(shè)計(jì)我們所有的widget。Android還不僅僅是這些,視圖類型也可以混合使用。Android還帶了一個(gè)widget庫(kù),這個(gè)類庫(kù)包括了滾動(dòng)條,文本實(shí)體,進(jìn)度條以及其他很多控件。這些標(biāo)準(zhǔn)的widget可以被重載或被按著我們的習(xí)慣定制。現(xiàn)在讓我們來進(jìn)入我們的例子。

    四、Android實(shí)例
        這個(gè)演示應(yīng)用程序?qū)⒀菔玖擞脩舻漠?dāng)前的經(jīng)度和緯度(在文本框中顯示)。onCreate構(gòu)造方法將和上面的例子基本相同,除了在其中加入了鍵盤處理,現(xiàn)在讓我們看一下onKeyDown的代碼。
      
        public boolean onKeyDown(int keyCode, KeyEvent event){
        if(keyCode != KeyEvent.KEYCODE_DPAD_CENTER || m_bLoading){
          return true;
        }
          m_bLoading = true;
          getLocation();
          return true;
       }

        下面讓我們來解釋一下這段代碼,首先,這段代碼檢查了當(dāng)前被按下的鍵,但還沒有開始處理。而是在getLocation方法中處理這一切的。然后,將裝載flag標(biāo)志以及調(diào)用getLocation方法,下面是getLocation方法的代碼。
      
          private void getLocation(){
            Location loc;
            LocationManager locMan;
            LocationProvider locPro;
            List<LocationProvider> proList;
            setContentView(R.layout.laoding);
            locMan = (LocationManager) getSystemService(LOCATION_SERVICE);
            proList = locMan.getProviders();
            locPro = proList.get(0);
            loc = locMan.getCurrentLocation(locPro.getName());
            Lat =  (float)loc.getLatitude();
            Lon =  (float)loc.getLongitude();
            CreateView();
            setContentView(customView);
          }
      
        到這為止,程序開始變得更有趣了。但是不幸的是,Google關(guān)于之方面的文檔還是比較少了。在程序的變量聲明之后,我們需要演示一些裝載信息。R.layout.loading符合了另一個(gè)簡(jiǎn)單的XML布局視圖。通過簡(jiǎn)單地調(diào)用setContentView方法可以使用轉(zhuǎn)載信息重繪屏幕。

        讀者要注意的是:在編譯時(shí),Android會(huì)預(yù)先將所有的XML布局?jǐn)?shù)據(jù)包裝起來。如果我們想在編譯后變化布局屬性,按著規(guī)定,我們必須在源程序中做這些事。

        獲得LocationManager的唯一方法是通過getSystemService()方法的調(diào)用。通過使用LocationManager,我們可以獲得一個(gè)位置提供者的列表。在一個(gè)真實(shí)的手持設(shè)備中,這個(gè)列表包含了一些GPS服務(wù)。實(shí)際上,我們希望選擇更強(qiáng)大,更精確,最后不帶有其他附加服務(wù)的GPS。現(xiàn)在,在模擬器中提供了一個(gè)用于測(cè)試的GPS,這個(gè)GPS來自San Francisco。定制的GPS文件可以可以被上傳,并進(jìn)行測(cè)試。如果我們要測(cè)試更復(fù)雜的應(yīng)用,來自San Francisco的GPS可能并不適合。

        目前我們可以使用位置管理器和位置提供者進(jìn)行g(shù)etCurrentLocation的調(diào)用。這個(gè)方法返回本機(jī)的當(dāng)前位置的一個(gè)快照,這個(gè)快照將以Location對(duì)象形式提供。在手持設(shè)備中,我們可以獲得當(dāng)前位置的經(jīng)度和緯度。現(xiàn)在,使用這個(gè)虛擬的手持設(shè)備,我們可以獲得這個(gè)例子程序的最終結(jié)果:建立了顯示一個(gè)定制的視圖。

        五、使用定制視圖
        在最簡(jiǎn)單的窗體中,一個(gè)Android中的視圖僅僅需要重載一個(gè)onDraw方法。定制視圖可以是復(fù)雜的3D實(shí)現(xiàn)或是非常簡(jiǎn)單的文本形式。下面的CreateView方法列出了上面看到的內(nèi)容。

        public void CreateView(){
        customView = new CustomView(this);
       }

        這個(gè)方法簡(jiǎn)單地調(diào)用了CustomView對(duì)象的構(gòu)造方法。CustomView類的定義如下:
        public class CustomView extends View{
           LocateMe overlord;
           public CustomView(LocateMe pCtx){
             super(pCtx);
             overlord = pCtx;
           }
           public void onDraw(Canvas cvs){
           Paint p = new Paint();
           String sLat = “Latitude: ” + overlord.getLat();
           String sLon = “Longitude: ” + overlord.getLon();
           cvs.drawText(sLat , 32, 32, p);
           cvs.drawText(sLon, 32, 44, p);
           }
         }

        這個(gè)定制的Android視圖獲得了經(jīng)度和違度的測(cè)試數(shù)據(jù),并將這些數(shù)據(jù)顯示在屏幕上。這要求一個(gè)指向LocateMe的指針,Activity類是整個(gè)應(yīng)用程序的核心。它的兩個(gè)方法是構(gòu)造方法和onDraw方法。這個(gè)構(gòu)造方法調(diào)用了超類的構(gòu)造方法以及引起了Activity指針的中斷。onDraw方法將建立一個(gè)新的Paint對(duì)象(這個(gè)對(duì)象封裝了顏色、透明度以及其他的主題信息),這個(gè)對(duì)象將會(huì)訪問顏色主題。在本程序中,安裝了用于顯示的字符串,并使用畫布指針將它們畫到屏幕上。這個(gè)和我們了解的J2ME游戲的畫布看起來非常類似。文章地址



    ?
    鳳凰涅槃/浴火重生/馬不停蹄/只爭(zhēng)朝夕
    ???? 隱姓埋名/低調(diào)華麗/簡(jiǎn)單生活/完美人生

    posted on 2010-10-17 15:57 poetguo 閱讀(2414) 評(píng)論(0)  編輯  收藏 所屬分類: Android

    主站蜘蛛池模板: 在线免费视频你懂的| 亚洲 欧洲 视频 伦小说| 一级女性全黄生活片免费看| 日韩成人免费视频播放| 中文无码亚洲精品字幕| 免费人成在线观看网站品爱网| 亚洲日韩av无码| 免费播放一区二区三区| 亚洲色图.com| 美女被cao免费看在线看网站| 亚洲Av高清一区二区三区| 国产香蕉九九久久精品免费| 亚洲国产av高清无码| 免费无遮挡无码视频网站| 精品在线免费视频| 亚洲性久久久影院| 麻豆精品不卡国产免费看| 亚洲三级电影网址| 日韩欧美一区二区三区免费观看| 中文字幕亚洲综合久久综合 | 最近免费视频中文字幕大全| 亚洲视频一区二区在线观看| 台湾一级毛片永久免费| 亚洲av成人片在线观看| 亚洲天堂在线视频| 欧洲精品99毛片免费高清观看| va天堂va亚洲va影视中文字幕| 国产精品免费看香蕉| 久久免费99精品国产自在现线| 亚洲色偷偷综合亚洲AVYP| 99精品视频免费在线观看| 亚洲综合一区国产精品| 亚洲精品一级无码中文字幕| 免费看无码特级毛片| 亚洲人配人种jizz| 亚洲午夜精品一级在线播放放 | 色偷偷尼玛图亚洲综合| 亚洲欧洲精品无码AV| 九九九精品成人免费视频| 国产免费内射又粗又爽密桃视频| 亚洲黄色在线电影|