我有和app,用户可以滚动浏览所有已安装应用的列表,他可以选择任何应用并启动它。
对于大多数应用程序,这适用于:
startActivity(getPackageManager().getLaunchIntentForPackage(packageName_selectedapp));
其中packageName_selectedapp是列表中所选应用程序的字符串。
但对于某些应用程序,函数getLaunchIntentForPackage(packageName_selectedapp)返回“null”,例如,如果它是dialer或contacts活动。
如何获取拨号器和联系人的launchIntent?
提前thx!答案 0 :(得分:4)
如何获取拨号器和联系人的launchIntent?
那些不是应用程序。这些是另一个应用程序的其他可启动活动。
因此,你需要决定你写的是什么。
你说你有“所有已安装应用的列表,他可以选择任何应用并启动它”。在这种情况下,您特别不需要“拨号器和联系人”,因为这些不是应用程序。
相反,如果要显示用户可以从中选择的所有可启动活动的列表,则不会使用getLaunchIntentForPackage()
。相反,您可以使用queryIntentActivities()
来查找可启动的活动。我有a sample app that demonstrates this,以发射器的形式。
答案 1 :(得分:0)
某些应用程序(如壁纸)没有默认活动,也无法通过启动意图启动,但如果您的上下文正确,您应该能够使用常规意图。我不确定这是否适用于有问题的特定应用....
我会假设你制作另一个主屏幕或者rom,这就是你想要这个的原因吗?
这应该有帮助
联系人/人物应用 选择联系人
要让用户选择联系人并为您的应用提供对所有联系信息的访问权限,请使用ACTION_PICK操作并将MIME类型指定为Contacts.CONTENT_TYPE。
传递给onActivityResult()回调的结果包含指向所选联系人的内容: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(如上一节所示)更有效,因为结果为您提供了直接访问所需数据,而无需对联系人提供程序执行更复杂的查询。
传递给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