2014-03-27 43 views
2

我有和應用程序,用戶可以在其中滾動所有安裝的應用程序的列表,他可以選擇任何應用程序並啓動它。啓動任何已安裝的應用程序

對於大多數應用程序能正常工作有:

startActivity(getPackageManager().getLaunchIntentForPackage(packageName_selectedapp)); 

其中packageName_selectedapp是從列表中選擇的應用的字符串。

但是對於某些應用程序,函數getLaunchIntentForPackage(packageName_selectedapp)返回「null」,例如,如果它是撥號程序或聯繫人活動。

如何獲取撥號程序和聯繫人的launchIntent?

thx提前!

回答

4

我怎樣才能獲得launchIntent爲撥號和聯繫人?

這些不是應用程序。這些是另一個應用程序的其他可啓動活動。

因此,你需要決定你在寫什麼。

你說你有「所有安裝的應用程序列表,他可以選擇任何應用程序並啓動它」。在這種情況下,你特別不想要「撥號器和聯繫人」,因爲這些不是應用程序。

相反,如果你想顯示所有啓動的活動,從中用戶可以選擇的列表,你將不會被使用getLaunchIntentForPackage()。相反,您將使用queryIntentActivities()來查找這些可啓動的活動。我有a sample app that demonstrates this,以發射器的形式。

+0

很漂亮的解釋!措辭優雅,簡單!豎起大拇指! – La5t5tarfighter

+0

嘿CommonsWare,對於遲到的回覆感到抱歉,沒有期待快速的幫助,並厭倦了編碼;)......你的解釋和你的代碼示例不會更好。它正是我需要的(應用程序的活動)。謝謝SOOOOOO很多! :) – treesoft

0

某些應用程序(如牆紙)沒有默認活動,無法通過啓動意向啓動,但如果上下文正確,您應該能夠使用常規意圖。即時通訊不知道如果這適用於有問題的特定應用程序....

我會假設你做出另一個主屏幕或ROM,這就是爲什麼你想要這樣嗎?

這應該有助於

聯繫人/聯繫人應用 選擇聯繫人

讓用戶選擇一個聯繫人,並提供給所有的聯繫人信息,您的應用程序的訪問,使用ACTION_PICK行動,並指定MIME類型到Contacts.CONTENT_TYPE。

Intent傳遞給您的onActivityResult()回調包含指向所選聯繫人的內容:URI。即使您的應用不包含READ_CONTACTS權限,響應也會授予您的應用使用聯繫人提供程序API讀取該聯繫人的臨時權限。

提示:如果您只需要訪問特定的聯繫信息(例如電話號碼或電子郵件地址),請參閱下一節有關如何選擇特定聯繫人數據的部分。

行動 ACTION_PICK 數據URI方案 無 MIME類型 Contacts.CONTENT_TYPE 例意圖:

static final int REQUEST_SELECT_CONTACT = 1; 

public void selectContact() { 
    Intent intent = new Intent(Intent.ACTION_PICK); 
    intent.setType(ContactsContract.Contacts.CONTENT_TYPE); 
    if (intent.resolveActivity(getPackageManager()) != null) { 
     startActivityForResult(intent, REQUEST_SELECT_CONTACT); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) { 
     Uri contactUri = data.getData(); 
     // Do something with the selected contact at contactUri 
     ... 
    } 
} 

有關如何獲取聯繫方式,一旦你取得聯繫URI的信息,請閱讀檢索細則聯繫人。請記住,當您檢索具有上述意圖的聯繫人URI時,您不需要READ_CONTACTS權限即可閱讀該聯繫人的詳細信息。

選擇特定的聯繫人數據

讓用戶選擇從接觸,信息的特定部分,諸如電話號碼,電子郵件地址,或其他數據類型,使用ACTION_PICK動作並指定MIME類型來下面列出的內容類型之一,例如CommonDataKinds.Phone.CONTENT_TYPE以獲取聯繫人的電話號碼。

如果您只需要從聯繫人中檢索一種類型的數據,則使用ContactsContract.CommonDataKinds類中的CONTENT_TYPE的技術比使用聯繫人更有效。CONTENT_TYPE(如上一節所示),因爲結果可讓您直接訪問所需的數據,而無需對聯繫人提供程序執行更復雜的查詢。

Intent傳遞給您的onActivityResult()回調包含指向所選聯繫人數據的內容:URI。即使您的應用不包含READ_CONTACTS權限,響應也會授予您的應用臨時權限以讀取該聯繫人數據。

行動 ACTION_PICK 數據URI方案 無 MIME類型 CommonDataKinds.Phone.CONTENT_TYPE從一個電話號碼的聯繫人 挑選。 CommonDataKinds.Email.CONTENT_TYPE 從聯繫人中選擇一個電子郵件地址。 CommonDataKinds.StructuredPostal.CONTENT_TYPE 從郵政地址中選擇聯繫人。 或ContactsContract下的許多其他CONTENT_TYPE值之一。

例意圖:

static final int REQUEST_SELECT_PHONE_NUMBER = 1; 

public void selectContact() { 
    // Start an activity for the user to pick a phone number from contacts 
    Intent intent = new Intent(Intent.ACTION_PICK); 
    intent.setType(CommonDataKinds.Phone.CONTENT_TYPE); 
    if (intent.resolveActivity(getPackageManager()) != null) { 
     startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK) { 
     // Get the URI and query the content provider for the phone number 
     Uri contactUri = data.getData(); 
     String[] projection = new String[]{CommonDataKinds.Phone.NUMBER}; 
     Cursor cursor = getContentResolver().query(contactUri, projection, 
       null, null, null); 
     // If the cursor returned is valid, get the phone number 
     if (cursor != null && cursor.moveToFirst()) { 
      int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER); 
      String number = cursor.getString(numberIndex); 
      // Do something with the phone number 
      ... 
     } 
    } 
} 

我將把你在這裏

http://developer.android.com/guide/components/intents-common.html

+0

嘿La5t5tarfighter,也謝謝你!選擇一個聯繫人等是我其實也需要;)但我必須清理我的代碼,並先研究一些其他的東西。我會回來的! ;) – treesoft

相關問題