2009-12-29 167 views
5

我想啓動用戶從我的應用程序中選擇的應用程序。不過,我不確定我會如何去做這件事。我試過這個:從我的應用程序啓動外部應用程序

Intent intent = new Intent(); 
intent.setAction(Contacts.Intents.SHOW_OR_CREATE_CONTACT); 
startActivity(intent); 

但是,這似乎是拋出一個錯誤,並強制關閉我的應用程序。我也試過在AndroidManifest文件中加入:

<action android:name="Contacts.Intents.SHOW_OR_CREATE_CONTACT"/> 

但無濟於事。

看看Logcat顯示它是「IOexception - 沒有這樣的文件或目錄」。由此產生了一些問題。我通讀了Android文檔,發現Contact.Intents類已被棄用。不過,它是繼任者,ContactContracts旨在API級別5,而我的API級別爲3級。這是否會成爲問題?此外,我已將此應用程序硬編碼到代碼中。有沒有辦法檢索用戶選擇的任何應用程序的意圖,以便它們可以啓動?

回答

7

你需要額外的信息傳遞到意圖告訴安卓什麼要顯示或創建。否則,Android不知道要開始什麼活動,並且(大概在你的情況下)會拋出一個ActivityNotFoundException

對於聯繫人,請使用通用Intent.ACTION_INSERT_OR_EDIT,然後使用單個聯繫人的MIME類型(Contacts.People.CONTENT_ITEM_TYPE)。

例如:

Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT); 
intent.setType(People.CONTENT_ITEM_TYPE); 
intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890"); 
intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE, Contacts.PhonesColumns.TYPE_MOBILE); 

這將調出聯繫人應用程序,提示您選擇現有聯繫人的電話號碼添加到,或創建新的聯繫人。

您不需要爲清單添加任何特殊的內容來啓動外部活動。只有當您直接操作聯繫人ContentProvider時,您需要將相應的CONTACT權限添加到您的清單。

+0

謝謝,這工作!這是否意味着我必須爲每個應用程序硬編碼額外的參數? – keyboardP 2009-12-29 22:57:38

+0

那麼你需要知道發生什麼意圖,所以在這個意義上你需要硬編碼的一些值。但是,你不是硬編碼的應用程序名稱或任何東西,只是一個意圖的行動。所以要查看圖像(不關心哪個應用程序將處理它),你可以這樣做:'新的Intent(Intent.ACTION_VIEW,Uri.parse(「content://foo/example/me.jpg」));'只要有一個應用程序可以處理通用'VIEW'動作和JPEG文件類型的組合,那麼這就是你所需要的。 – 2009-12-29 23:08:44

+0

啊,我現在明白了。這使得它更容易大聲笑:)。謝謝您的幫助。 – keyboardP 2009-12-29 23:19:25

0

您需要將有效參數傳遞給您開始的應用程序。很多應用程序都希望數據URI和/或某些附加內容是有效的。

0

請嘗試以下代碼:

意向意圖=新意圖(Contacts.Intents.SHOW_OR_CREATE_CONTACT);

this.startActivity(intent);

(抱歉,如果有什麼不對的語法,我沒有在這臺電腦機器人)

並從清單中的作用。這是不需要的。 動作方法用於別的東西。 欲瞭解更多信息,請看看Android的網站:http://developer.android.com/reference/android/content/Intent.html

丹尼爾

+0

您在'Intent'構造函數*中傳遞的字符串是* action;原始的代碼片段是正確的(如果你寫了一個不必要的詳細版本)。 – 2009-12-29 22:27:27

1

我使用此代碼用於這一目的:

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.setClassName("com.android.settings", "com.android.settings.Settings"); 
startActivity(intent); 

這將啓動設置應用程序,也可以使用這些:

intent.setClassName("com.android.music", "com.android.music.MediaPlaybackActivityStarter"); 
intent.setClassName("com.android.contacts", "com.android.contacts.DialtactsContactsEntryActivity"); 
intent.setClassName("com.android.contacts", "com.android.contacts.DialtactsActivity"); 

第一個啓動默認的音樂應用程序,第二個聯繫人,以及第三個撥號器。 希望這有助於。

+0

請注意,您可以使用以下內容:new Intent(android.provider.Settings.ACTION_SETTINGS) – 2011-11-09 23:37:54

0

您所調用的活動不僅會出現在Manifest中,而且還會出現在CALLING包的Manifest中。

相關問題