情况: 我的应用程序的用户需要呼叫他们的联系人,仍然能够查看特殊的联系信息。
使用以下代码轻松发起呼叫:
private void performDial(String numberString) {
if ( checkSelfPermission(android.Manifest.permission.CALL_PHONE) ==
PackageManager.PERMISSION_GRANTED) {
if (!numberString.equals("")) {
Uri number = Uri.parse("tel:" + numberString);
Intent dial = new Intent(Intent.ACTION_CALL, number);
startActivity(dial);
}
}
}
然而,拨号器的GUI将隐藏联系信息。要查看此联系信息,用户必须执行两个步骤:
问题:
是否可以以“图标”形式启动拨号器意图?
是否可以通过编程方式执行这两个步骤?
我已尝试过的内容: Intent参数Flags和Extras似乎没有给出以“icon”形式启动拨号器的选项。
以下代码片段模拟主页按钮:
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
以下片段可以将主要应用程序带回到前面。
Intent intent = new Intent(this, MainActivity.class);
intent. addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
但是在拨号器处于活动状态后,这两个片段都不起作用。如果在启动意图后直接执行这些片段,拨号器将无法启动。
这是清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="copec.test2app">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ShowWebsite"> </activity>
<receiver android:name="copec.test2app.OutCallLogger" >
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
</application>
感谢任何帮助。
答案 0 :(得分:0)
您无法隐藏拨号器。你可以做的是将你的应用程序移动到拨号器顶部的前台。使用startActivity()
启动拨号器后,您应该等到通话开始。您可以通过监控拨出呼叫状态来执行此操作,或者只需等待几秒钟(您可以通过将以下代码包装在Runnable
中然后使用{{1}将其发布到Handler
来执行此操作然后,要将您的应用移动到前台,请执行以下操作:
postDelayed()