iOS-应用之间调用
生活随笔
收集整理的這篇文章主要介紹了
iOS-应用之间调用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
二、調用自己開發的應用 1)在plist文件中,注冊對外接口 在xcode group&files 里面,展開 resources選擇<app>info.plist 鼠標右擊information property list ,然后從列表中選擇URL types? 右擊 add row 添加一個對象(item)右擊item add row ? 從列表中選擇 URL ?Schemes 再右擊添加一個對象(item1) 將item1得值設置為:myapp 這個myapp就是對外接口,其它應用可以通過它,調用該應用 plist如下圖所示: 2)調用方法 在你需要調用上面注冊過對外接口的應用中,添加下面代碼即可: ?? NSURL *url ?= [NSURL URLWithString:@"myapp:"]; [[UIApplication sharedApplication] openURL:url]; 通過上述兩個步驟,你可以在你的應用中,讓用戶打開你的其它應用。 如果加參數的話,最好寫成@"myapp://.........",就好比http請求的“http”換成@“myapp”. 3)處理URL請求 應用程序委托在application:handleOpenURL:方法中處理傳遞給應用程序的URL請求。如果您已經為自己的應用程序注冊了定制的URL模式,則務必在委托中實現這個方法。 基于定制模式的URL采用的協議是請求服務的應用程序能夠理解的。URL中包含一些注冊模式的應用程序期望得到的信息,這些信息是該程序在處理或響應URL請求時需要的。傳遞給application:handleOpenURL:方法的NSURL對象表示的是Cocoa Touch框架中的URL。NSURL遵循RFC 1808規范,該類中包含一些方法,用于返回RFC 1808定義的各個URL要素,包括用戶名、密碼、請求、片斷、和參數字符串。與您注冊的定制模式相對應的“協議”可以使用這些URL要素來傳遞各種信息。 在程序清單1-2顯示的application:handleOpenURL:方法實現中,傳入的URL對象在其請求和片斷部分帶有具體應用程序的信息。應用程序委托抽出這些信息—在這個例子中,是指一個to-do任務的名稱和到期日—并根據這些信息創建應用程序的模型對象。 [plain]
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { ? if ([[url scheme] isEqualToString:@"myapp"]) { ? //處理鏈接 ? return YES; ? } ? return NO; ? } ? - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { if ([[url scheme] isEqualToString:@"myapp"]) { //處理鏈接 return YES; } return NO; } 請務必對傳入的URL輸入進行驗證。如果您希望了解如何避免URL處理的相關問題,請參見安全編碼指南文檔中的驗證輸入部分。如果要了解蘋果定義的URL模式,請參見蘋果的URL模式參考 第二種處理URL請求方法 [cpp]
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions ? { ? //被其他應用調用 ?? NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey]; ? if(url) {//做出相應的判斷 ?? if ([[url scheme] isEqualToString:@"myapp"]) { ? //處理鏈接 ?? } ? } ? self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; ? // Override point for customization after application launch. ?? self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease]; ? self.window.rootViewController = self.viewController; ? [self.window makeKeyAndVisible]; ? return YES; ? } ? - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //被其他應用調用 NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey]; if(url) {//做出相應的判斷 if ([[url scheme] isEqualToString:@"myapp"]) { //處理鏈接 } } self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after application launch. self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; }說明:iOS 程序啟動時總會調用application:didFinishLaunchingWithOptions:,其中第二個參數launchOptions為NSDictionary類型的對象,里面存儲有此程序啟動的原因。 launchOptions中的可能鍵值見UIApplication Class Reference的Launch Options Keys節 。 若用戶直接啟動,lauchOptions內無數據; 若由其他應用程序通過openURL:啟動,則UIApplicationLaunchOptionsURLKey對應的對象為啟動URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey對應啟動的源應用程序的bundle ID (NSString); 若由本地通知啟動,則UIApplicationLaunchOptionsLocalNotificationKey對應的是為啟動應用程序的的本地通知對象(UILocalNotification); 若由遠程通知啟動,則UIApplicationLaunchOptionsRemoteNotificationKey對應的是啟動應用程序的的遠程通知信息userInfo(NSDictionary); 其他key還有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey, UIApplicationLaunchOptionsNewsstandDownloadsKey。 參考:http://blog.csdn.net/tiger119/article/details/7949004 4).快速測試外部調用 1.回到Home屏幕,啟動Safari(在iPhone仿真器上,在菜單上選擇Hardware->Home命令就可以回到Home屏幕)。 2.在Safari的地址欄中,鍵入使用定制模式的URL,即“myapp:”,加參數的話則為“myapp://........” 3.確認您的應用程序是否啟動,以及應用程序委托是否收到application:handleOpenURL:消息。 三、官方原理講解 和其它應用程序進行通訊 如果一個應用程序支持一些已知類型的URL,您就可以通過對應的URL模式和該程序進行通訊。然而,在大多數情況下,URL只是用于簡單地啟動一個應用程序并顯示一些和調用方有關的信息。舉例來說,對于一個用于管理地址信息的應用程序,您就可以在發送給它的URL中包含一個Maps程序可以處理的地址,以便顯示相應的位置。這個級別的通訊為用戶創造一個集成度高得多的環境,減少應用程序重新實現設備上其它程序已經實現的功能的必要性。 蘋果內置支持http、mailto、tel、和sms這些URL模式,還支持基于http的、指向Maps、YouTube、和iPod程序的URL。應用程序也可以自己注冊定制的URL模式。您的應用程序可以和其它應用程序通訊,具體方法是用正確格式的內容創建一個NSURL對象,然后將它傳給共享UIApplication對象openURL:方法。openURL:方法會啟動注冊接收該URL類型的應用程序,并將URL傳給它。當用戶最終退出該應用程序時,系統通常會重新啟動您的應用程序,但并不總是這樣。系統會考慮用戶在URL處理程序中的動作及在用戶看來返回您的應用程序是否合理,然后做出決定。 下面的代碼片斷展示了一個程序如何請求另一個程序提供的服務(假定這個例子中的“todolist”是由應用程序注冊的定制模式): NSURL *myURL = [NSURL URLWithString:@"todolist://www.acme.com?Quarterly%20Report#200806231300"];? [[UIApplication sharedApplication] openURL:myURL];? 要提示:如果您的URL類型包含的模式和蘋果定義的一樣,則啟動的是蘋果提供的程序,而不是您的程序。如果有多個第三方的應用程序注冊處理同樣的URL模式,則該類型的URL由哪個程序處理是沒重要提示:如果您的URL類型包含的模式和蘋果定義的一樣,則啟動的是蘋果提供的程序,而不是您的程序。如果有多個第三方的應用程序注冊處理同樣的URL模式,則該類型的URL由哪個程序處理是沒有定義的。? 如果您的應用程序定義了自己的URL模式,則應該實現對該模式進行處理的方法,具體信息在“實現定制的URL模式”部分中進行描述。有關系統支持的URL處理,包括如何處理URL的格式,請參見蘋果的URL模式參考。 實現定制的URL模式 您可以為自己的應用程序注冊包含定制模式的URL類型。定制的URL模式是第三方應用程序和其它程序及系統進行交互的機制。通過定制的URL模式,應用程序可以將自己的服務提供給其它程序。 注冊定制的URL模式 在為您的應用程序注冊URL類型時,必須指定CFBundleURLTypes屬性的子屬性,我們已經在“信息屬性列表”部分中介紹過這個屬性了。CFBundleURLTypes屬性是應用程序的Info.plist文件中的一個字典數組,每個字典負責定義一個應用程序支持的URL類型。表1-6描述了CFBundleURLTypes字典的鍵和值。 表1-6 ?CFBundleURLTypes屬性的鍵和值 鍵 值 CFBundleURLName 這是個字符串,表示URL類型的抽象名。為了確保其唯一性,建議您使用反向DNS風格的標識,比如com.acme.myscheme。 這里提供的URL類型名是一個指向本地化字符串的鍵,該字符串位于本地化語言包子目錄中的InfoPlist.strings文件中。本地化字符串是人類可識別的URL類型名稱,用相應的語言來表示。 CFBundleURLSchemes 這是個URL模式的數組,表示歸屬于這個URL類型的URL。每個模式都是一個字符串。屬于指定URL類型的URL都帶有它們的模式組件。 圖1-7顯示了一個正在用內置的Xcode編輯器編輯的Info.plist文件。在這個圖中,左列中的URL類型入口相當于您直接加入到Info.plist文件的CFBundleURLTypes鍵。類似地,“URL identifier”和“URL Schemes”入口相當于CFBundleURLName和CFBundleURLSchemes鍵。 在Info.plist文件中定義一個定制的URL模式 您在對CFBundleURLTypes屬性進行定義,從而注冊帶有定制模式的URL類型之后,可以通過下面的方式來進行測試: 連編、安裝、和運行您的應用程序。 回到Home屏幕,啟動Safari(在iPhone仿真器上,在菜單上選擇Hardware > Home命令就可以回到Home屏幕)。 在Safari的地址欄中,鍵入使用定制模式的URL。 確認您的應用程序是否啟動,以及應用程序委托是否收到application:handleOpenURL:消息。
總結
以上是生活随笔為你收集整理的iOS-应用之间调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SkipList 跳跃表
- 下一篇: 4月,mysql