如何直接从Android应用程序拨打号码

时间:2017-01-20 13:31:43

标签: android android-intent call

我想直接从我的应用程序打开一个调用屏幕,我在互联网上搜索了很多内容并且没有成功。我跟随从Android应用程序拨打号码的代码如下:

startActivity(new Intent(Intent.ACTION_CALL).setData(Uri.parse("tel:" + phoneNo)));
Manifest中的

<uses-permission android:name="android.permission.CALL_PHONE"/>

但此代码显示选择操作窗口,我不想显示此窗口:

enter image description here

是否可以直接打开电话呼叫应用而不是打开操作窗口?

2 个答案:

答案 0 :(得分:1)

不幸的是(或者真的没有)你不能。这是安全措施。你不能直接打开一些应用程序,因为在70%的情况下(只是我测试后的结果)它会给你安全错误。

一些澄清

如评论中所述,您可以在Intent中定义包。但这真的是不健康的行为。例如

    Intent sendIntent = new Intent(Intent.ACTION_VIEW);
    sendIntent.setType("message/rfc822");
    sendIntent.setData(Uri.parse("test@gmail.com"));
    sendIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
    sendIntent.putExtra(Intent.EXTRA_EMAIL, getSelectedContactsEmails().toArray());
    sendIntent.putExtra(Intent.EXTRA_SUBJECT, "subj");
    sendIntent.putExtra(Intent.EXTRA_TEXT, "text");
    startActivityForResult(sendIntent,0);

此代码将直接调用GMail应用。但它有不可预测的行为。在我的情况下,我在一个Nexus 5上崩溃了,但是所有的都在另一个上工作。此外,您还需要添加其他代码以确保安装该软件包。

在您的情况下,您需要拨打一些手机应用程序。你知道Android设备碎片吗?有10000多种不同的设备,所有设备都可以有不同的呼叫包。所以你真的需要吗?

实际上甚至还有一种特殊的方法,可以处理系统所需的app选择

startActivity(Intent.createChooser(emailIntent, "Send mail via ...")); //example

此代码永远不会让您遇到安全错误,因为系统会将用户操作视为真相&#34;

澄清2

是的,您可以循环浏览所有可以接受您意图的套餐。 ,您甚至可以调用随机(或预定义)包和,它可能在某些情况下有效。但某些并不意味着所有并且存在问题。如果应用程序有可能在某些设备上崩溃,您无论如何都需要避免它。

答案 1 :(得分:0)

您可以为意图设置包名称并直接调用应用程序

intent.setPackage("com.android.phone");