如何在Android上使用单个Intent显示短信和拨号应用?

时间:2016-01-25 10:46:29

标签: android android-intent phone-number

从我的应用中,用户可以发短信/呼叫一个人。我在我的应用程序中通过Intent启动一个Activity,目前1用于发短信,1用于拨号器,是否可以将这些组合起来,例如:所以当用户点击一个按钮来调用/发送文本时,它会在一个窗口中显示一个短信/拨号应用程序列表?

拨号器:

Intent callIntent = new Intent(Intent.ACTION_CALL);
 callIntent.setData(Uri.parse("tel:" + somenumber));
 startActivity(callIntent);

消息应用:

Intent callIntent = new Intent(Intent.ACTION_PROCESS_TEXT);
callIntent.setData(Uri.parse("tel:" + somenumber));
startActivity(callIntent);

我想要做的是,我没有两个单独的按钮1用于文本,1用于呼叫,我想拥有1,当点击时,它应该允许用户呼叫或发短信。

1 个答案:

答案 0 :(得分:1)

您可以使用Intent.EXTRA_INITIAL_INTENTS并附带queryIntentActivities来实现此目的。

有点复杂,但它会起作用尝试以下代码..

final List<Intent> finalIntents = new ArrayList<Intent>();
final Intent textIntent = new Intent(Intent.ACTION_VIEW);
textIntent.setType("text/plain");
textIntent.setData(Uri.parse("sms:"));
final PackageManager packageManager = getActivity().getPackageManager();
final List<ResolveInfo> listCam = packageManager.queryIntentActivities(textIntent, 0);
for (ResolveInfo res : listCam) {
  final String packageName = res.activityInfo.packageName;
  final Intent intent = new Intent(textIntent);
  intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
  intent.setPackage(packageName);
  finalIntents.add(intent);
}

Intent callIntent = new Intent(Intent.ACTION_DIAL);
callIntent.setData(Uri.parse("tel:121"));
Intent chooserIntent = Intent.createChooser(
        callIntent, "Select app to share");

chooserIntent.putExtra(
        Intent.EXTRA_INITIAL_INTENTS, finalIntents.toArray(new Parcelable[]{}));

startActivity(chooserIntent);

祝你好运..!