Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android上同时显示文本和拨号程序应用程序?_Android_Android Intent_Phone Number - Fatal编程技术网

如何在Android上同时显示文本和拨号程序应用程序?

如何在Android上同时显示文本和拨号程序应用程序?,android,android-intent,phone-number,Android,Android Intent,Phone Number,从我的应用程序中,用户可以发短信/打电话给某人。我正在通过我的应用程序中的Intent启动一项活动,目前1个用于发送短信,1个用于拨号,是否可以将这些功能组合在一起,例如,当用户单击按钮呼叫/发送短信时,它会在1个窗口中显示一个发短信/拨号应用程序列表 拨号器: Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:" + somenumber)); startActivit

从我的应用程序中,用户可以发短信/打电话给某人。我正在通过我的应用程序中的Intent启动一项活动,目前1个用于发送短信,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);

我想做的是,我不希望有两个单独的按钮,一个用于文本,一个用于调用,我希望有一个,当单击时,它应该允许用户调用或文本。

您可以使用
意图来实现这一点。额外的初始意图
伴随着查询活动

虽然有点复杂,但可以尝试以下代码

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);
finalintments=newarraylist();
最终意图textIntent=新意图(Intent.ACTION\u视图);
textIntent.setType(“文本/普通”);
setData(Uri.parse(“sms:”);
最终PackageManager PackageManager=getActivity().getPackageManager();
最终列表listCam=packageManager.QueryInputActivities(textIntent,0);
用于(ResolveInfo res:listCam){
最后一个字符串packageName=res.activityInfo.packageName;
最终意图=新意图(文本意图);
setComponent(新组件名(res.activityInfo.packageName,res.activityInfo.name));
intent.setPackage(packageName);
添加(意图);
}
意向callIntent=新意向(意向.行动拨号);
setData(Uri.parse(“tel:121”);
Intent-chooserint=Intent.createChooser(
callIntent,“选择要共享的应用程序”);
选择内容(
Intent.EXTRA_INITIAL_Intent,finalintments.toArray(新包裹[]{}));
开始触觉(选择内容);

祝你好运

我认为这是不可能的。因为当你用intent.ACTION\u call或intent.ACTION\u PROCESS\u TEXT调用intent时,android会打开默认的调用和文本应用程序。因此,除非你的手机中有一个同时支持通话和文字的应用程序,否则在同一个应用程序中,这似乎是不可能的。我会再等一点,然后可能会放弃,但如果谷歌没有做到这一点,那真是太遗憾了,因为我认为没有必要重复代码来执行两个类似的活动。一种可能可行的方法可能是替代安卓的
startActivity
来调用或发送文本,您可以使用应用列表创建自己的对话框,并使用
PackageManager
查找所有可以调用或发送文本的应用,将每个应用添加到对话框的列表中,当用户从该列表中选择应用时,直接启动该应用。虽然会更复杂,但你可以有一个带有两个列表的对话框,一个用于发送文本的应用程序,一个用于呼叫,或者任何你想要的。我将尝试找出一些细节,并写出一个真实的答案。这有点复杂,但也有可能。自定义对话框仍然意味着有两个按钮,一个用于呼叫意图,一个用于文本,并且仍然需要编写两组代码。不,您只需要一个按钮即可显示此对话框,因为您的对话框可以同时包含文本和拨号程序应用。我将用一些代码来写一个答案。干杯,它是有效的,是否可以检查用户是否安装了whatsapp,如果是,在snackbar上创建一个部分来显示whatsapp。另外,是否可以为每个部分设置标题。例如,与选择要共享的应用程序不同,我希望选择要发送消息的应用程序(sms应用程序列表)和选择要呼叫的应用程序的另一个标题(拨号程序列表),然后如果可能,检查用户是否有whatsapp,如果有,则在snackbar上创建另一个部分以显示whats应用程序。(很抱歉,如果这些问题都是愚蠢的,我对android不太了解,如果我玩弄这些代码,我可能会把事情搞砸)。我不确定,让我检查一下,如果答案正确,请接受。@Henry请每篇帖子问一个问题。如果你还有其他问题,请分别提问。@MikeM。我已经创建了另一个帖子,请你看一看,看看你是否能帮上忙。