2

情况: 我的应用程序的用户需要呼叫他们的联系人并且仍然能够查看特殊的联系人信息。

使用以下代码可以轻松发起呼叫:

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 将隐藏联系信息。为了查看此联系信息,用户必须执行两个步骤:

  1. 按下主页按钮 这会将拨号器缩小为一个小“图标”。
  2. 使用左键在正在运行的应用程序列表中选择正确的应用程序。显示相关信息,同时仍以“图标”的形式激活拨号器。

问题:

是否可以以“图标”形式启动拨号器意图?

是否可以以编程方式执行这两个步骤?

我已经尝试过: Intent 参数 Flags 和 Extras,似乎没有提供以“图标”形式启动拨号程序的选项。

以下代码片段模拟主页按钮:

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>

任何帮助表示赞赏。

4

1 回答 1

0

您无法隐藏拨号器。您可以做的是将您的应用程序移到拨号器顶部的前台。与您一起启动拨号器后,startActivity()应等到呼叫开始。您可以通过监视拨出呼叫状态来做到这一点,或者只需等待几秒钟(您可以通过将以下代码包装在 a 中Runnable然后将其发布到HandlerusingpostDelayed()来做到这一点。然后,要将您的应用程序移至前台,请执行此操作:

PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage("your.package.name"); 
getApplicationContext().startActivity(intent);
于 2017-11-28T17:11:32.787 回答