如何在查看应用程序信息时使用拨号程序?

时间:2017-11-28 16:50:24

标签: android android-intent android-dialer

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

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

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. 使用左键在列表中选择正确的应用程序 正在运行应用仍然有显示相关信息 拨号器以“图标”的形式激活。
  3. 问题:

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

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

    我已尝试过的内容: 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>
    

    感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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

postDelayed()