【问题标题】:Starting ANY of the installed apps启动任何已安装的应用程序
【发布时间】:2014-03-27 16:09:26
【问题描述】:

我有一个应用程序,用户可以在其中滚动浏览所有已安装应用程序的列表,他可以选择任何应用程序并启动它。

对于大多数应用,这适用于:

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

其中 packageName_selectedapp 是列表中所选应用的字符串。

但对于某些应用,函数 getLaunchIntentForPackage(packageName_selectedapp) 返回“null”,例如,如果它是拨号器或联系人活动。

如何获取拨号器和联系人的 launchIntent?

提前谢谢!

【问题讨论】:

    标签: android android-intent android-package-managers


    【解决方案1】:

    如何获取拨号器和联系人的 launchIntent?

    那些不是应用程序。这些是另一个应用程序的其他可启动活动。

    因此,你需要决定你要写什么。

    您说您有“所有已安装应用程序的列表,他可以选择任何应用程序并启动它”。在这种情况下,您特别不想要“拨号器和联系人”,因为它们不是应用程序。

    如果您想要显示所有可启动活动的列表,用户可以从中选择,您将不会使用getLaunchIntentForPackage()。相反,您将使用queryIntentActivities() 来查找那些可启动的活动。我有a sample app that demonstrates this,以启动器的形式。

    【讨论】:

    • 非常漂亮的解释!措辞优雅,简单!竖起大拇指!
    • 嘿,CommonsWare,抱歉回复晚了,没想到这么快就能得到帮助,而且厌倦了编码;)......你的解释和你的代码示例再好不过了。它正是我需要的(应用程序的活动)。非常感谢你! :)
    【解决方案2】:

    某些应用程序(例如壁纸)没有默认活动,并且无法通过启动 Intent 启动,但如果您的上下文正确,您应该能够使用常规 Intent。但是我不确定这是否适用于相关的特定应用程序......

    我会假设您制作另一个主屏幕或 rom,这就是您想要这个的原因?

    这应该有帮助

    通讯录/人脉应用 选择联系人

    要让用户选择联系人并为您的应用提供对所有联系人信息的访问权限,请使用 ACTION_PICK 操作并将 MIME 类型指定为 Contacts.CONTENT_TYPE。

    传递给您的 onActivityResult() 回调的结果 Intent 包含以下内容:指向所选联系人的 URI。即使您的应用不包含 READ_CONTACTS 权限,响应也会授予您的应用使用 Contacts Provider API 读取该联系人的临时权限。

    提示:如果您只需要访问特定的联系信息,例如电话号码或电子邮件地址,请参阅下一部分,了解如何选择特定的联系数据。

    动作 ACTION_PICK 数据 URI 方案 没有 MIME 类型 联系人.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

    【讨论】:

    • 嘿 La5t5tarfighter,也谢谢你!选择一个联系人等等也是我真正需要的;)但我必须先清理我的代码并研究其他一些东西。我会回来的! ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 2015-08-24
    • 2011-05-08
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    相关资源
    最近更新 更多