也許你要設計一個通訊錄軟體,通訊錄中會紀錄電話,你希望按下通訊錄中的電話號碼就會自動撥號。或是像是我想過的一個idea,我稱之為Alert to Send,紀錄了朋友的生日或是重要的事情,當事情發生的時間到了就會發出警告(Alert),提醒你要寄簡訊給朋友說個生日快樂,或是要寄信給老闆報告今天出差的狀況。要做到這些都可以透過開啓對應的iPhone內建軟體來達到目的。
要開啓iPhone的內建軟體,你會用到UIApplication類別。那iPhone有哪些內建軟體可以透過UIApplication開啓呢 ?包括了:
- 瀏覽器(Safari)
- 地圖(Google Map)
- 電話撥號
- 簡訊發送
- 電子郵件
- AppStore
本篇心得先詳細說明開啓內建地圖(Google Map)的方法,並會補充說明開啓上列內建軟體的方法。
PS:不是用Safari開Google Map喔,這樣做的效率驚人,驚人的慢,慢的可怕!
(1)開啓內建的Google Map
因為我要做的iPhone軟體恰好與Google Map扯上關係,所以對這裡也比較熟悉。我希望可以做到這樣的畫面。 讀取一個KML,將KML的地標顯示在地圖上,設定中心點,設定Zoom Level
。
一般狀況下要開啟內建的軟體 ,其實就是使用UIApplication開啟對應的內建軟體的連結。像是如果要開啟Google Map的連結就是「http://maps.google.com/maps? QueryString」
所以程式會這樣呼叫,這是第一種方法:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@http://maps.google.com/maps?QueryString]];
理論上是這樣沒錯,可是很令人頭痛的狀況是有些QueryString的參數在網頁版的Google Map支援,可是在內建的Google Map不支援,如果使用這些不支援的參數會發生什麼事呢?程式會正常運作,不會有Error,只不過它會自動幫你把Safari打開,接著載入網頁版的Google Map。
關於Google Map的QueryString詳細內容可以參考 iPhone URLScheme Reference。但也 僅止於參考,上面寫的不一定可以使用=="
在我的應用中,必須要讀取KML,試過了很多種QueryString都無法做到,都會幫我打開Safari,最後終於看到 FlickrKML這個範例。
用裡面的網址,結果成功了,程式內容如下,這是第二種方法:
NSString* openURL = @"maps://?f=q&hl=en&geocode=&q=KmlUrl";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: openURL ]];
但是 用了這樣的方式,似乎就無法設定Start Center和Zoom Level,真是怪哉!如果你想透過設定KML來解決,漬漬...那也是沒用的,我 設定<LookAt>標籤,但是沒有用,如果你有更好的解法請告訴我Orz...!!!
另外,在<Placemark>標籤中有許多子標籤,我試了一下, 只有表示電話號碼的標籤<phoneNumber>可以顯示在Google Map的資訊頁面。就像這樣:
其他像是地址<address>、描述<description>、延伸資料<ExtendedData>,這些標籤都沒有效果。 關於KML可以參考Google的線上文件 KML Reference。所以在不使用iPhone SDK 3.0的MapKit Framework的情況下,我實在猜不出來AroundMe到底怎麼做到的。因為AroundMe一次只需要顯示一個地標,所以我猜測它可能是用第一種方法,但是我踹不出來,QueryString真是一門學問,嘆~
目前計畫跳槽到iPhone SDK 3.0,直接用MapKit做做看,應該會容易許多。
以下方法的來源是 Launching Other Apps within an iPhone Application這篇文章,我沒有測試過XD
(2)開啓電子郵件
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:
@mailto://info@iphonedevelopertips.com]];
(3)開啓電話撥號程式
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@mailto://info@iphonedevelopertips.com]];
(4)開啓簡訊發送
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:55555"]];
(5)開啓瀏覽器
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:websiteUrl]];
(6)開啓AppStore
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=291586600&mt=8"]];
開啓AppStore這倒是一個蠻有趣的功能,我們公司似乎有另外一組人馬要做的軟體就是與AppStore有關。但是我也忘記他們要做什麼了XD
以上我都沒試過~!