999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

用Android設(shè)計(jì)手機(jī)快餐服務(wù)程序

2011-12-31 00:00:00齊京
科技創(chuàng)新導(dǎo)報(bào) 2011年20期

摘要:在移動(dòng)互聯(lián)網(wǎng)上Android手機(jī)是非常出色的。在Android程序設(shè)計(jì)中,定位服務(wù)很酷,在使用GPS中,可以嵌入你自己的應(yīng)用程序在其中,做一些很有意義的事情。在這篇文章里,我們將快餐服務(wù)放進(jìn)來,從而實(shí)現(xiàn)在Android應(yīng)用程序里使用GPS、Google地圖、xml文件獲取和解析等應(yīng)用,通過編程來達(dá)到我們的目的。

關(guān)鍵詞: GPSAPIKeyXML

中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1674-098X(2011)07(b)-0000-00

Design Fast food service on Android devices

QI Jing

(Beijing Information Technology College,Beijing,100087,China)

Abstract:In the mobile Internet Android phones are very good. In Android programming, positioning services to cool, in use GPS, can embed your own application in it, do some very meaningful. In this article, we will put in fast food services, thus realize in Android applications use GPS, Google maps, XML file access and analytical applications, programmed to achieve our goal.

Key words:GPS;APIKey;XML

1 引 言

在這篇文章里,講述了快餐服務(wù)在Android程序設(shè)計(jì)中是如何實(shí)現(xiàn)的。文章首先展示了快餐服務(wù)的程序運(yùn)行界面,然后講述了它的設(shè)計(jì)過程,列舉了部分功能的實(shí)現(xiàn)方法。在相關(guān)技術(shù)部分,文章講了如何使用Google地圖,如何使用GPS提供的經(jīng)緯度坐標(biāo)。在應(yīng)用效果部分,我們把程序交給一些人使用,歸納他們的需求,加以實(shí)現(xiàn)。本文的最后對(duì)所講述的內(nèi)容進(jìn)行了小結(jié)。

2 快餐服務(wù)的程序功能

我們?cè)O(shè)計(jì)的快餐服務(wù)程序功能如下:

圖1 程序功能圖2 GPS定位

也可以輸入某個(gè)位置的經(jīng)緯度,會(huì)顯示該地理位置。例如:經(jīng)度 103.85緯度 1.35

會(huì)定位于新加坡宏茂橋附近。點(diǎn)擊“查詢周邊指定快餐”,會(huì)顯示能夠查詢的快餐列表。

圖3 快餐列表和顯示位置

點(diǎn)擊麥當(dāng)勞圖標(biāo)后,選擇Maps,出現(xiàn)標(biāo)示麥當(dāng)勞的地圖,然后點(diǎn)擊McDonald’s后出現(xiàn)圖4。

圖4 三維街道

點(diǎn)擊“指南針”后出現(xiàn)圖5。

圖5 指南針圖6 人氣產(chǎn)品

圖6是人氣產(chǎn)品點(diǎn)擊。點(diǎn)擊“休閑”出現(xiàn)“新聞閱讀”及“天氣預(yù)報(bào)”。

圖7 新聞和天氣

3 設(shè)計(jì)過程

快餐服務(wù)程序由八個(gè)部分組成,它們都是圍繞著快餐服務(wù)展開的。

⑴首先在GpsView程序中列出了對(duì)其他八個(gè)功能程序的調(diào)用:

case 0:intent = new Intent(GpsView.this,MyPositionActivity.class);startActivity(intent);break;

case 1:intent = new Intent(GpsView.this,QueryPositionByLLActivity.class);startActivity(intent);break;

case 2:intent = new Intent(GpsView.this,MyView1.class);startActivity(intent);break;

case 3:intent = new Intent(GpsView.this,MainActivity.class);startActivity(intent);break;

case 4:intent = new Intent(GpsView.this,MainActivity1.class);startActivity(intent);break;

case 5:intent = new Intent(GpsView.this,MyView.class);startActivity(intent);break;

case 6:intent = new Intent(GpsView.this,cameraView.class);startActivity(intent);break;

case 7:Intent mIntent = new Intent();ComponentName ccomp = new ComponentName(\"com.rss_reader\", \"com.logo.LogoActivity\");mIntent.setComponent(ccomp);mIntent.setAction(\"android.intent.action.MAIN\");mIntent.addCategory(\"android.intent.category.LAUNCHER\");startActivity(mIntent);break;

⑵下面這段是地圖放大的Button和縮小的Button的部分代碼:

b1 = (Button)findViewById(R.id.myButton2);

b1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) {intZoomLevel++; if(intZoomLevel>mMapView01.getMaxZoomLevel()){ intZoomLevel =mMapView01.getMaxZoomLevel(); }mMapController01.setZoom(intZoomLevel);} });

b2 = (Button)findViewById(R.id.myButton3);

b2.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) {intZoomLevel--;

if(intZoomLevel<1) { intZoomLevel = 1; } mMapController01.setZoom(intZoomLevel); } });

⑶下面這段是測(cè)量方向的部分代碼:

final int count = getChildCount();int maxHeight = 0; int maxWidth = 0;

for (int i = 0; i < count; i++) {final View child = getChildAt(i);

if (child.getVisibility() != GONE) {

measureChild(child, widthMeasureSpec, heightMeasureSpec); } }

maxWidth += getPaddingLeft() + getPaddingRight();

maxHeight += getPaddingTop() + getPaddingBottom();

Drawable drawable = getBackground();

if (drawable != 1) { maxHeight = Math.max(maxHeight, drawable.getMinimumHeight());

maxWidth = Math.max(maxWidth, drawable.getMinimumWidth());}

setMeasuredDimension(resolveSize(maxWidth, widthMeasureSpec),

resolveSize(maxHeight, heightMeasureSpec));

⑷下面這段是下載新聞數(shù)據(jù)的部分代碼:

ListView itemlist = (ListView) findViewById(R.id.itemlist);

itemlist.setCacheColorHint(0);

if (queryItem().getCount() == 0) {

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setMessage(\"第一次使用此功能,請(qǐng)下載! \").setCancelable(1).setPositiveButton(\"確定\",new DialogInterface .OnClickListener() {public voidonClick(DialogInterface dialog,int which) {if (!rssthread.isAlive()) {rssthread.start();}

if (!progressthread.isAlive()) {showDialog(i++);progressthread.start();}}}).create().show();

} else {Cursor cursor = queryItem();

SimpleCursorAdapter adapter1 = new SimpleCursorAdapter(this,R.layout.list_view, cursor, new String[] { \"title\",\"pubDate\" }, new int[] { R.id.title, R.id.date });

itemlist.setAdapter(adapter1);itemlist.setOnItemClickListener(this);itemlist.setSelection(0);}}

⑸下面這段是得到和顯示天氣的部分代碼:

SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);

rpc.addProperty(\"theCityName\", cityName);

AndroidHttpTransport ht = new AndroidHttpTransport(URL);

ht.debug = true;

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(

SoapEnvelope.VER11); envelope.bodyOut = rpc;

envelope.dotNet = true;envelope.setOutputSoapObject(rpc);

ht.call(SOAP_ACTION, envelope);

debug(LOG_TAG, \"DUMP>> \" + ht.requestDump);

debug(LOG_TAG, \"DUMP<< \" + ht.responseDump);

SoapObject result = (SoapObject) envelope.bodyIn;

SoapObject detail = (SoapObject) result.getProperty(\"getWeatherbyCityNameResult\");

parseWeather(detail);

String date = detail.getProperty(6).toString();

weatherToday = \"今天:\" + date.split(\" \")[0];

weatherToday = weatherToday + \"\天氣:\" + date.split(\" \")[1];

weatherToday = weatherToday + \"\氣溫:\"+ detail.getProperty(5).toString();

weatherToday = weatherToday + \"\風(fēng)力:\"+ detail.getProperty(7).toString() + \"\\";

iconToday[0] = parseIcon(detail.getProperty(8).toString());

iconToday[1] = parseIcon(detail.getProperty(9).toString());

weatherCurrent = detail.getProperty(10).toString();

date = detail.getProperty(13).toString();

weatherTomorrow = \"明天:\" + date.split(\" \")[0];

weatherTomorrow = weatherTomorrow + \"\天氣:\" + date.split(\" \")[1];

weatherTomorrow = weatherTomorrow + \"\氣溫:\"+ detail.getProperty(12).toString();

weatherTomorrow = weatherTomorrow + \"\風(fēng)力:\"+ detail.getProperty(14).toString();

iconTomorrow[0] = parseIcon(detail.getProperty(15).toString());

iconTomorrow[1] = parseIcon(detail.getProperty(16).toString());

date = detail.getProperty(18).toString();

weatherAfterday = \"后天:\" + date.split(\" \")[0];

weatherAfterday = weatherAfterday + \"\天氣:\" + date.split(\" \")[1];

weatherAfterday = weatherAfterday + \"\氣溫:\"+ detail.getProperty(17).toString();

weatherAfterday = weatherAfterday + \"\風(fēng)力:\"+ detail.getProperty(19).toString() + \"\\";

iconAfterday[0] = parseIcon(detail.getProperty(20).toString());

iconAfterday[1] = parseIcon(detail.getProperty(21).toString());

4 相關(guān)技術(shù)

⑴ 首先從Android SDK v1.0開始,在Android應(yīng)用使用Google地圖之前,需要申請(qǐng)一個(gè)免費(fèi)的Google地圖的API key。可以按照下面的步驟:

如果在Android仿真器上測(cè)試應(yīng)用程序,SDK調(diào)試證書在默認(rèn)文件夾“ C:\\Documents and Settings\\\\Local Settings\\Application Data\\Android”里,文件名是debug.keystore。用調(diào)試密鑰,還需要提取它的MD5指紋。這個(gè)指紋是申請(qǐng)Google地圖的關(guān)鍵。keytool.exe從“C:\\Program Files\\Java\\\\bin”里發(fā)出:

keytool -list -alias androiddebugkey -keystore E:\\android-sdk-windows \\.android\\ debug.keystore -storepass android -keypass android,然后復(fù)制這個(gè)MD5證書指紋到 http://code.google.com/android/maps-api-signup.html就可以得到Google API key:

android:apiKey=\"0l4sCTTyRmXTNo7k8DREHvEaLar2UmHGwnhZVHQ\"。還需要修改AndroidManifest.xml文件,添加元素和INTERNET 許可:

⑵ 這一部分是根據(jù)手機(jī)GPS提供的經(jīng)緯度坐標(biāo),在地圖中顯示用戶當(dāng)前的位置,并在此基礎(chǔ)上添加Overlay標(biāo)記。通過getSystemService()方法獲得LocationManager對(duì)象,該對(duì)象通過getLastKnownLocation()方法獲得當(dāng)前位置對(duì)象Location,最后animateTo()方法具體完成定位。

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

String provider = LocationManager.GPS_PROVIDER;

LocationProvider provider1=locationManager.getProvider(provider);

provider1.requiresSatellite();

Location location = locationManager.getLastKnownLocation(provider);

Lat=location.getLatitude();Lng=location.getLongitude();

GeoPoint point = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));

controller.animateTo(point);

⑶ 新聞的XML文件是從\"http://news.qq.com/newsgn/rss_newsgn.xml\"下載的,然后進(jìn)行編碼轉(zhuǎn)換。過程是首先建立要返回的xml單一輸入源,這是通過數(shù)組存儲(chǔ)輸入流信息,用字符串存儲(chǔ)xml內(nèi)容,然后對(duì)xml文件中的編碼進(jìn)行轉(zhuǎn)換,再將xml內(nèi)容轉(zhuǎn)換成字節(jié)數(shù)組,寫進(jìn)輸出緩存,將輸出緩存轉(zhuǎn)換成輸入緩存,最后將輸入緩存轉(zhuǎn)換成輸入流。

InputSource newis = new InputSource();

InputStream in = is.getByteStream();

byte[] by = new byte[5096];String theString = \"\";

try {int length = in.read(by, 0, by.length);

while (length > 0) {

String temp = EncodingUtils.getString(by, 0, length, \"gb2312\");

theString = theString + temp;

length = in.read(by, 0, by.length);}

theString = theString.replaceFirst(oldCharet, newCharet);

theString = theString.substring(0, theString.lastIndexOf(\">\") + 1);

ByteArrayOutputStream out = new ByteArrayOutputStream();

by = new byte[5096];by = theString.getBytes(\"UTF-8\");

out.write(by);

ByteArrayInputStream bin = new ByteArrayInputStream(out.toByteArray());

in = (InputStream) bin;newis = new InputSource(in);return newis;

5 應(yīng)用效果

在開發(fā)手機(jī)快餐服務(wù)程序的過程中,我們多次將程序安裝在設(shè)備中交給不同的人使用,然后讓他們提出建議,我們加以改進(jìn),現(xiàn)在使用人員反映良好。在程序中我們預(yù)留了一些接口,可以將新功能隨時(shí)添加進(jìn)去。在程序中我們還設(shè)計(jì)了聯(lián)系方式,可以將建議隨時(shí)發(fā)給我們。今后還會(huì)有更多基于Google地圖和基于位置服務(wù)的需求,有更多有趣的項(xiàng)目可以開發(fā),那就讓我們學(xué)習(xí)更多這方面的知識(shí)吧。

6 結(jié)語

這篇文章講述了開發(fā)手機(jī)快餐服務(wù)程序的過程,在這里我列舉了一些實(shí)現(xiàn)方法,從而更好的讓大家了解整個(gè)實(shí)現(xiàn)過程。快餐服務(wù)的內(nèi)容可以包括很多,也很容易擴(kuò)展到其他各方面,關(guān)于Google地圖和基于位置的服務(wù)也有很多,這里只是拋磚引玉。

主站蜘蛛池模板: 婷婷综合亚洲| 最新加勒比隔壁人妻| 亚洲第一区在线| 91小视频在线观看免费版高清| 乱人伦视频中文字幕在线| 亚洲爱婷婷色69堂| 伊人久久婷婷| 天堂成人av| 99尹人香蕉国产免费天天拍| 国产精品一区二区不卡的视频| 97国产在线观看| 日韩毛片基地| 亚洲欧美另类色图| 亚洲天堂成人在线观看| 国产精品欧美日本韩免费一区二区三区不卡 | 国产成人精品在线| 久久精品丝袜| 久久精品国产免费观看频道| 日本午夜精品一本在线观看| 国产在线视频导航| 成人av专区精品无码国产| 精品国产免费观看一区| 亚欧成人无码AV在线播放| 色婷婷成人| 国产91丝袜在线播放动漫| 欧美精品不卡| 91外围女在线观看| 91福利一区二区三区| 精品国产香蕉伊思人在线| 97青青青国产在线播放| 国产精品福利社| 国产精品刺激对白在线| 久久久久青草线综合超碰| 黄色不卡视频| 精品福利视频导航| 99中文字幕亚洲一区二区| 国产丝袜丝视频在线观看| 91精品国产自产91精品资源| 国产哺乳奶水91在线播放| 青青草一区| 久久成人国产精品免费软件 | 午夜激情婷婷| 99久久国产综合精品2020| 性欧美在线| 九九视频免费看| 免费av一区二区三区在线| 91久久国产热精品免费| 亚洲毛片网站| 国产成人a在线观看视频| 国产福利小视频在线播放观看| 久久精品国产亚洲麻豆| 亚洲欧美自拍中文| www.精品国产| AV网站中文| 色窝窝免费一区二区三区| 国产美女视频黄a视频全免费网站| 久久久久亚洲Av片无码观看| 欧美日韩中文国产| 免费福利视频网站| 国产a网站| 无码一区中文字幕| 国产欧美日韩一区二区视频在线| 国产人人射| 91丝袜美腿高跟国产极品老师| 99国产精品国产高清一区二区| 波多野结衣在线se| 国产精品99久久久| 亚洲色图在线观看| 亚洲欧美不卡| a毛片免费看| 中文字幕第4页| 丰满少妇αⅴ无码区| 亚洲天堂日韩在线| 日韩在线欧美在线| 国产精品偷伦视频免费观看国产| 香蕉视频国产精品人| 日韩黄色大片免费看| 日韩欧美一区在线观看| 国产真实乱人视频| 在线欧美日韩| 亚洲无码91视频| 国产成人亚洲无吗淙合青草|