我想直接从我的应用程序打开一个调用屏幕,我在互联网上搜索了很多内容并且没有成功。我跟随从Android应用程序拨打号码的代码如下:
startActivity(new Intent(Intent.ACTION_CALL).setData(Uri.parse("tel:" + phoneNo)));
Manifest
中的:
<uses-permission android:name="android.permission.CALL_PHONE"/>
但此代码显示选择操作窗口,我不想显示此窗口:
是否可以直接打开电话呼叫应用而不是打开操作窗口?
答案 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;
是的,您可以循环浏览所有可以接受您意图的套餐。 是,您甚至可以调用随机(或预定义)包和是,它可能在某些情况下有效。但某些并不意味着所有并且存在问题。如果应用程序有可能在某些设备上崩溃,您无论如何都需要避免它。
答案 1 :(得分:0)
您可以为意图设置包名称并直接调用应用程序
intent.setPackage("com.android.phone");