簡體   English   中英

啟動任何已安裝的應用程序

[英]Starting ANY of the installed apps

我有一個應用程序,用戶可以在其中滾動瀏覽所有已安裝應用程序的列表,然后他可以選擇任何應用程序並啟動它。

對於大多數應用程序,此功能適用於:

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

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

但是對於某些應用程序,功能getLaunchIntentForPackage(packageName_selectedapp)返回“空”,例如,如果它是撥號程序或聯系人活動。

如何獲得撥號器和聯系人的launchIntent?

提前謝謝!

如何獲得撥號器和聯系人的launchIntent?

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

因此,您需要確定所寫的內容。

您說您擁有“所有已安裝應用程序的列表,他可以選擇任何應用程序並啟動它”。 在這種情況下,您特別不希望“撥號器和聯系人”,因為它們不是應用程序。

相反,如果要顯示用戶可以從中選擇的所有可啟動活動的列表,則不會使用getLaunchIntentForPackage() 相反,您將使用queryIntentActivities()查找那些可啟動的活動。 我有一個示例應用程序,以啟動器的形式演示了這一點

某些應用程序(例如牆紙)沒有默認活動,無法通過啟動意圖啟動,但是如果上下文正確,則應該能夠使用常規意圖。 我不確定但是這是否適用於有問題的特定應用。

我會假設您正在制作另一個主屏幕或rom,這就是為什么您想要這個?

這應該有所幫助

聯系人/人應用程序選擇聯系人

要讓用戶選擇一個聯系人並為您的應用提供對所有聯系人信息的訪問權限,請使用ACTION_PICK操作並將MIME類型指定為Contacts.CONTENT_TYPE。

傳遞到onActivityResult()回調的結果Intent包含以下內容:指向所選聯系人的URI。 即使您的應用程序不包含READ_CONTACTS權限,響應也會授予您的應用程序臨時權限,以使用Contacts Provider 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的這種方法比使用Contacts.CONTENT_TYPE的方法(如上一節中所示)更有效,因為結果使您可以直接訪問所需的數據,而無需您對Contacts Provider執行更復雜的查詢。

傳遞到onActivityResult()回調的結果Intent包含以下內容:指向所選聯系人數據的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM