www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]Android智能手機(jī)天氣預(yù)報(bào)系統(tǒng)設(shè)計(jì)

0 引言

  為了讓智能手機(jī)用戶能夠隨時(shí)隨地查詢互聯(lián)網(wǎng)所提供的服務(wù),一種高效的辦法就是將應(yīng)用系統(tǒng)的功能拓展到手機(jī)終端,讓手機(jī)能通過移動(dòng)網(wǎng)和互聯(lián)網(wǎng)訪問Web 網(wǎng)站并處理各項(xiàng)業(yè)務(wù)。Android 系統(tǒng)是Google 公司開發(fā)的一個(gè)開源手機(jī)操作系統(tǒng),它包括了操作系統(tǒng)、用戶界面和應(yīng)用程序,即智能手機(jī)工作所需的全部軟件。Android 的最大特點(diǎn)是它的開放性體系架構(gòu),不僅具有非常好的開發(fā)、調(diào)試環(huán)境,而且還具有各種可擴(kuò)展的設(shè)施,包括豐富的圖形組件、多媒體支持功能和強(qiáng)大的瀏覽器,而且已有許多比較成熟的應(yīng)用案例。

  本文提出了智能手機(jī)天氣實(shí)況預(yù)報(bào)系統(tǒng)的一種設(shè)計(jì)實(shí)現(xiàn)方法,供開發(fā)者參考。

  1 Android應(yīng)用程序設(shè)計(jì)原理

  一個(gè)Android 應(yīng)用程序,通常由AcTIvity、Intent Receiver、Service、CONtent Provider 四種功能組件構(gòu)成。但是,并不是每一個(gè)Android 應(yīng)用程序都需要用到這四種功能組件,而是只需上述四種功能組件的某些組合。

  1.1 Activity

  Activity 是最基本的Android 應(yīng)用程序組件。大多數(shù)應(yīng)用由多個(gè)屏幕組成,一個(gè)Activity 通常則是一個(gè)單獨(dú)的屏幕。每一個(gè)Activity 都被實(shí)現(xiàn)為一個(gè)獨(dú)立的類,并且從Activity 基類中繼承而來。Activity 類將會(huì)顯示由視圖控件組成的用戶接口,并對(duì)事件做出響應(yīng)。Android 使用Intent 這個(gè)特殊類,實(shí)現(xiàn)在屏幕與屏幕之間移動(dòng)。通過解析各種Intent,從一個(gè)屏幕導(dǎo)航到另一個(gè)屏幕是很簡(jiǎn)單的。當(dāng)向前導(dǎo)航時(shí),Activity 將會(huì)調(diào)用STartActivity(Intent myIntent)方法,然后,系統(tǒng)會(huì)在所有安裝的應(yīng)用程序中所定義的IntentFilter 中查找,找到最匹配myIntent的和Intent 對(duì)應(yīng)的Activity.新的Activity 接收到myIntent 的通知后,開始運(yùn)行。當(dāng)startActivity 方法被調(diào)用時(shí)將觸發(fā)解析myIntent 的動(dòng)作。這個(gè)機(jī)制具有兩點(diǎn)優(yōu)勢(shì):一是能夠重復(fù)利用從其他組件中以Intent 形式產(chǎn)生的一個(gè)請(qǐng)求;二是Activity 可以在任何時(shí)候被一個(gè)具有相同IntentFilter 的新Activity 取代。

  1.2 Intent Receiver

  通過Intent Receiver 實(shí)現(xiàn)的應(yīng)用能夠?qū)σ粋€(gè)外部的事件作出響應(yīng)。Intent Receiver 在AndroidManifest.xml 中注冊(cè),也可以在代碼中使用Context.registerReceiver()進(jìn)行注冊(cè)。當(dāng)一個(gè)IntentReceiver 被觸發(fā)時(shí),應(yīng)用不必對(duì)請(qǐng)求調(diào)用Intent Receiver,系統(tǒng)會(huì)在需要的時(shí)候啟動(dòng)應(yīng)用。各種應(yīng)用還可以通過使用Context.

  brOAdcastIntent()將它們自己的Intent Receiver廣播給其他應(yīng)用程序。

  1.3 Service

  Service 是一段長(zhǎng)生命周期的、沒有用戶界面的程序。例如媒體播放器這個(gè)Activity 會(huì)使用Context.startService()來啟動(dòng)一個(gè)Service,從而可以在后臺(tái)播放音樂。同時(shí),系統(tǒng)也將保持這個(gè)Service 一直執(zhí)行,直到Service 運(yùn)行結(jié)束。系統(tǒng)可通過使用Context.bindService()方法,連接到一個(gè)Service 上(如果這個(gè)Service 還沒有運(yùn)行將啟動(dòng)它)。當(dāng)連接到一個(gè)Service 之后,還可以利用Service 提供的接口與它通信。就媒體播放器來說,還可以進(jìn)行暫停、重播等操作。

  1.4 Content Provider

  Android 應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件、SQL 數(shù)據(jù)庫,甚至是任何有效的設(shè)備中。Content Provider 實(shí)現(xiàn)了應(yīng)用數(shù)據(jù)與其他的應(yīng)用程序的共享。Content Provider 類實(shí)現(xiàn)一組標(biāo)準(zhǔn)的方法,能夠讓其他應(yīng)用程序保存或讀取此ContentProvider處理的各種類型數(shù)據(jù)。在Android 中,默認(rèn)使用SQLite 作為系統(tǒng)數(shù)據(jù)庫,但使用方法略有不同。Android 中每一個(gè)應(yīng)用程序都運(yùn)行在各自的進(jìn)程中,當(dāng)訪問其他應(yīng)用程序的數(shù)據(jù)時(shí),需要在不同的虛擬機(jī)之間傳遞數(shù)據(jù),這樣操作起來會(huì)有些困難(正常情況下,不能讀取其他應(yīng)用程序的數(shù)據(jù)庫文件)。ContentProvider 正是解決不同的應(yīng)用包共享數(shù)據(jù)的工具。

  2 天氣實(shí)況預(yù)報(bào)系統(tǒng)的具體實(shí)現(xiàn)

  基于Android 平臺(tái)的智能手機(jī)訪問服務(wù)器的主要技術(shù)是數(shù)據(jù)交互方法?;贏ndroid 操作系統(tǒng)的天氣實(shí)況預(yù)報(bào)系統(tǒng)設(shè)計(jì)的核心是通過調(diào)用通信協(xié)議SOAP(Simple Object AccessProtocol)的接口,從Web Service 提供商中提取天氣預(yù)報(bào)的數(shù)據(jù)信息,為客戶端服務(wù)。其基本功能是當(dāng)用戶運(yùn)行天氣預(yù)報(bào)系統(tǒng)程序時(shí),在手機(jī)屏幕上顯示出中國(guó)的城市名稱,用戶單擊任意一個(gè)城市名,可獲得該城市的天氣實(shí)況預(yù)報(bào)信息。用戶也可以輸入城市名稱,點(diǎn)擊查詢獲得天氣預(yù)報(bào)信息。CitiesWeather-Forecast 工程目錄結(jié)構(gòu)及其源代碼文件如圖1所示。

  

2.1 Android平臺(tái)的用戶界面實(shí)現(xiàn)

Android 提供的可變化的用戶界面(UI)開發(fā)模塊是基于XML 文件的。這些XML 文件放在工程/res/layout 下面。這個(gè)目錄可包含所有應(yīng)用程序所需的非碼部分,比如圖片、字符串、xml 文件。當(dāng)要使用到這些資源時(shí),在代碼目錄中打開R.java文件即可。在XML 文件里編輯界面的代碼,實(shí)現(xiàn)起來不僅方便,使用時(shí)也會(huì)更加靈活。

在Android 程序設(shè)計(jì)中要用到一些基本的Android UI 元素,通過使用Views、View Groups 和layouts 可為Activity 創(chuàng)建功能性的、富有直觀力的UI.通常是使用Android SDK 中提供的一些控件,進(jìn)行布局、擴(kuò)展和定制這些控件,并使用ViewGroups 去組合Views,創(chuàng)建由相互作用的子控件組成的原子的、重復(fù)利用的UI 元素。也可以創(chuàng)建自己的Views,來實(shí)現(xiàn)顯示數(shù)據(jù)和與用戶交互的新途徑;或使用一些繼承自View Group 的Layout 管理器來組織Android UI中的單個(gè)元素到屏幕上。

在一個(gè)Android 應(yīng)用中,用戶界面由View 和View Group對(duì)象構(gòu)建。View 與View Group 有很多種類,而它們都是View類的子類。View 對(duì)象是Android 平臺(tái)中用戶界面的基本單元。View 類是widgets(工具)類的父類,它們提供了諸如文本輸入框和按鈕之類的UI 對(duì)象的完整實(shí)現(xiàn)。View Group 類是Layouts(布局)類的父類,它們提供了諸如流式布局、表格布局以及相對(duì)布局之類的布局架構(gòu)。

View 對(duì)象是一個(gè)數(shù)據(jù)體,它的屬性存儲(chǔ)了用于屏幕上一塊矩形區(qū)域的布局參數(shù)及內(nèi)容。并負(fù)責(zé)它所轄的這個(gè)矩形區(qū)域之中所有測(cè)量、布局、焦點(diǎn)轉(zhuǎn)換、卷動(dòng)以及按鍵/觸摸手勢(shì)的處理。作為一個(gè)用戶界面對(duì)象,View 同時(shí)也擔(dān)任著用戶交互關(guān)鍵點(diǎn)以及交互事件接受者的角色。天氣實(shí)況預(yù)報(bào)系統(tǒng)程序功能比較單一,其UI 也相對(duì)比較簡(jiǎn)單,只要有一個(gè)輸入框、一個(gè)查詢按鈕以及一個(gè)顯示所有中國(guó)城市信息的列表即可。為了建立Android 平臺(tái)的用戶界面,首先要在Package Explorer 窗口中展開Layout 后新建。xml 文件,用來對(duì)窗口界面進(jìn)行布局,主要有系統(tǒng)運(yùn)行的主配置文件main.xml 和result.xml.

Layout 是一類特殊的ViewGroup 控件,它們本身沒有任何可顯示內(nèi)容,存在的惟一原因就是其中的內(nèi)部結(jié)構(gòu),能夠更好地?cái)[放它的子控件。比如Linearlayout,可將子控件按水平或垂直方向按順序排列下去;Tablelayout,可以將子控件按照表格的形式,一枚枚放置好;Relativelayout 更靈活,可以設(shè)定各個(gè)控件之間的對(duì)齊和排列關(guān)系,適合定制復(fù)雜的界面。有了Layout 的存在,控件和控件之間不再是割裂地存在,而是更有機(jī)地結(jié)合在一起,設(shè)定起來也更為方便。在本實(shí)例的main.xml 文件中主要是添加一些界面的布局設(shè)置,例如如下代碼:

<LinearLayout

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

>

<EditText android:id="@+id/cityText"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/cityText"/>

<Button android:id="@+id/searchBtn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/searchBtn"/>

</LinearLayout>

上述代碼生成了一個(gè)Linearlayout,定義了一個(gè)EditText 和Button,并且設(shè)置了相關(guān)的參數(shù)。在Android 中,控件最重要的大小屬性是width/height,開發(fā)者可以指明控件的大小,控件的寬、高以及在屏幕中的顯示位置等,可以設(shè)定成為fill_parent 和wrap_content.另外,還可以設(shè)置相應(yīng)的文本信息,并可通過android:text="@string/cityText"/>進(jìn)行引用(string 文件存放在工程的res/values 中)。按照這種方法,還可以依據(jù)需要定義相應(yīng)的布局控件,譬如定義用來呈現(xiàn)天氣實(shí)況信息的UI等。

2.2 創(chuàng)建中國(guó)城市列表數(shù)據(jù)

根據(jù)天氣預(yù)報(bào)系統(tǒng)功能需求分析,系統(tǒng)啟動(dòng)后,應(yīng)在主界面上呈現(xiàn)出中國(guó)國(guó)內(nèi)所有城市的列表數(shù)據(jù),因此需要?jiǎng)?chuàng)建中國(guó)城市列表數(shù)據(jù),包括獲取、解析城市列表數(shù)據(jù),并在用戶界面上呈現(xiàn)出來。為此,需要解決的問題是手機(jī)終端從Web 服務(wù)器獲取了所有類型的數(shù)據(jù)之后,將這些數(shù)據(jù)進(jìn)一步交給Android 手機(jī)終端View 組件[4],在手機(jī)界面上顯示給用戶。

⑴ 獲取城市列表數(shù)據(jù)

Android 沒有提供Web Service 的組件庫,但可以通過修改在PC 或J2ME 上使用的開源Web Service Java 庫作為AndroidWeb Servic 庫使用。kSOAP2(http://ksoap2.sourceforge.net)是一個(gè)在智能手機(jī)上的SOAP Web Service 客戶端包,可用于資源受限制的Java 環(huán)境如Applets 或J2ME 應(yīng)用程序。在GoogleCode 上有一個(gè)項(xiàng)目ksoap2-android(http://code.google.com/p/ksoap2-android/)可用在Android 平臺(tái)上實(shí)現(xiàn)輕量級(jí)的SOAP 庫,即使用ksoap2-android 的API 來調(diào)用遠(yuǎn)端Web Service 的服務(wù)。

因此需要在CitiesWeatherForecast.java 的onCreate()中進(jìn)行數(shù)據(jù)獲取的初始化工作。通過定義一個(gè)方法public List<String>getAllCitiesNAMEs()可獲得中國(guó)城市名稱列表。也就是說,采用它提供的獲得全球各個(gè)國(guó)家城市的方法GetCitiesByCountry,通過http://www.webservicex.net/globalweather.asmx 上的WebService 可提供天氣預(yù)報(bào)服務(wù)。譬如,通過Constant.java 中的public class Constant{},設(shè)置SOAP Action 要調(diào)用的方法名、命名空間以及Web Service URL值,其源代碼為:

public static final String SOAP_ACTION=

"http://www.webserviceX.NET/GetCitiesByCountry";

public static final String METHOD_NAME=

"GetCitiesByCountry";

public static final String SOAP_ACTION2=

"http://www.webserviceX.NET/GetWeather";

public static final String METHOD_NAME2="GetWeather";

public static final String NAMESPACE=

"http://www.webserviceX.NET";

public static final String URL=

http://www.webservicex.net/globalweather.asmx;

然后在WebServiceCaller.java 中實(shí)例化一個(gè)SoapSerializationEnvelope對(duì)象,設(shè)置SoapObject 的命名空間、方法名、參數(shù)等;并通過實(shí)例化一個(gè)AndroidHttpTransport 對(duì)象來調(diào)用WebService,并獲得xml 字符串?dāng)?shù)據(jù),其代碼段如下:

AndroidHttpTransport androidHttpTransport=

new AndroidHttpTransport (Constant.URL);

try {

androidHttpTransport.call(soapAction, envelope);

Object result=envelope.getResponse();

xmlStr=result.toString();

} catch(Exception e) {

e.printStackTrace();

}

⑵ 解析數(shù)據(jù)列表

Android 操作系統(tǒng)對(duì)xml 字符串?dāng)?shù)據(jù)的操作功能很強(qiáng),提供了dom、sax 以及xmlpul 3 種方式。Android SDK 提供了android.sax 包以方便SAX Handler 的開發(fā),可用來解析xml 結(jié)果字符串。在本設(shè)計(jì)實(shí)例的CitiesWeatherForecast.java 文件中,解析xml 數(shù)據(jù)時(shí),先通過RootElement root=new RootElement("NewDataSet")獲得xml 數(shù)據(jù)的根節(jié)點(diǎn);然后再尋找其子節(jié)點(diǎn)直到找到City 子節(jié)點(diǎn),并設(shè)置一個(gè)監(jiān)聽器setEndTextElementListener()來獲得City 子節(jié)點(diǎn)的值;最后使用org.xml.sax 的SAXParser 來解析xml 數(shù)據(jù),把數(shù)據(jù)存入List<String>并返回:

SAXParserFactory factory=SAXParserFactory.newInstance();

SAXParser parser=factory.newSAXParser();

XMLReader xmlreader=parser.getXMLReader();

xmlreader.setContentHandler(root.getContentHandler());

InputSource is=new InputSource

(new StringBufferInputStream(xmlStr));

xmlreader.parse(is);

⑶ 在UI上呈現(xiàn)城市列表數(shù)據(jù)

當(dāng)獲得List<String>類型的數(shù)據(jù)之后,就可以把它綁定到main.xml 定義的ListView 組件上,然后使用ListActivity 呈現(xiàn)列表數(shù)據(jù)。在CitiesWeatherForecast.java 中的代碼段為:

List<String> cityList=getAllCitiesNames();

setListAdapter(new ArrayAdapter<String>(this,

android.R.layout.simple_list_item_1, cityList));

即使用方法setListAdapter()把一個(gè)ListActivity 填充進(jìn)去。

2.3 城市天氣實(shí)況預(yù)報(bào)系統(tǒng)的調(diào)試

城市天氣實(shí)況預(yù)報(bào)系統(tǒng)的測(cè)試結(jié)果如下。在Eclipse 的Package Explorer 窗口中用鼠標(biāo)右鍵選擇CitiesWeatherForecast工程名,在彈出的窗口中選擇"Run As"→"Android Application"安裝該應(yīng)用程序到Android 模擬器并啟動(dòng)它。然后單擊所要查詢的城市名稱列表項(xiàng),稍等片刻便會(huì)顯示出該城市的天氣實(shí)況信息。也可以在文本框中直接輸入所要查詢的城市名稱,單擊"Search"同樣會(huì)獲得相應(yīng)城市的天氣預(yù)報(bào)信息。

3 結(jié)束語

Android 平臺(tái)具有極大的開放性和兼容性,并且本身大量使用了開源代碼庫,深為開發(fā)人員所喜愛。Android 智能手機(jī)應(yīng)用程序的開發(fā)涉及了它的整個(gè)體系結(jié)構(gòu),是一項(xiàng)非常復(fù)雜的工程。本文在介紹基于Android 平臺(tái)的應(yīng)用程序設(shè)計(jì)原理的基礎(chǔ)上,提出了Android 用戶界面設(shè)計(jì)、獲取并解析城市列表數(shù)據(jù)的一種方法,給出了在用戶界面上呈現(xiàn)數(shù)據(jù)的原理與設(shè)計(jì)過程,最后通過模擬器進(jìn)行了應(yīng)用程序的調(diào)試。當(dāng)然,基于Android 平臺(tái)的開發(fā)技術(shù)還需要進(jìn)一步完善,需要在日后的工作中不斷探索、研究,以建立實(shí)用的城市天氣實(shí)況預(yù)報(bào)系統(tǒng)。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉