Android 简明教程

Android - Phone Calls

Android 提供内置应用程序用于拨打电话,在某些情况下,我们可能需要通过我们的应用程序拨打电话。这可以通过使用具有适当操作的隐式意图轻松完成。此外,我们可以使用 PhoneStateListener 和 TelephonyManager 类,以便监控设备上某些电话状态的变化。

本章列出了创建可用于拨打电话的应用程序所需的所有简单步骤。你可以使用 Android 意图通过调用 Android 的内置拨打电话功能来拨打电话。以下部分说明进行拨号所需的意图对象的各个部分。

Intent Object - Action to make Phone Call

你需要使用 ACTION_CALL 操作来触发 Android 设备中可用的内置拨号功能。以下是要使用 ACTION_CALL 操作创建意图的简单语法:

Intent phoneIntent = new Intent(Intent.ACTION_CALL);

你可以使用 ACTION_DIAL 操作代替 ACTION_CALL,在这种情况下,在进行直接拨号之前,你将可以选择修改硬编码的电话号码。

Intent Object - Data/Type to make Phone Call

要拨打给定的号码 91-000-000-0000,你需要使用 setData() 方法将 tel: 指定为 URI,如下所示:

phoneIntent.setData(Uri.parse("tel:91-000-000-0000"));

有趣的是,为了拨打电话,不需要指定任何额外的 data 或数据类型。

Example

以下示例向你实际展示如何使用 Android 意图拨打给定的移动电话号码。

Step

Description

1

你将使用 Android studio IDE 创建一个 Android 应用,并将其命名为 My Application,包名为 com.example.saira_000.myapplication。

2

修改 src/MainActivity.java 文件并添加所需的代码以进行拨号。

3

修改布局 XML 文件 res/layout/activity_main.xml,添加任何所需的 GUI 组件。我添加了一个简单的按钮,以拨打 91-000-000-0000 号码。

4

无需定义默认字符串常量。Android Studio 会处理默认常量。

5

修改 AndroidManifest.xml,如下所示

6

运行应用,以启动 Android 模拟器,并验证应用中已执行的更改。

以下是修改的主活动文件 src/MainActivity.java 的内容。

package com.example.saira_000.myapplication;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
   private Button button;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      button = (Button) findViewById(R.id.buttonCall);

      button.setOnClickListener(new View.OnClickListener() {
         public void onClick(View arg0) {
            Intent callIntent = new Intent(Intent.ACTION_CALL);
            callIntent.setData(Uri.parse("tel:0377778888"));

            if (ActivityCompat.checkSelfPermission(MainActivity.this,
               Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                  return;
               }
               startActivity(callIntent);
         }
      });

   }
}

以下是 res/layout/activity_main.xml 文件的内容——

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

   <Button
      android:id="@+id/buttonCall"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="call 0377778888" />

</LinearLayout>

以下是 res/values/strings.xml 的内容,用于定义两个新常量——

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">My Application</string>
</resources>

以下是 AndroidManifest.xml 的默认内容−

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.saira_000.myapplication" >

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

   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >

      <activity
         android:name="com.example.saira_000.myapplication.MainActivity"
         android:label="@string/app_name" >

         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>

      </activity>

   </application>
</manifest>

让我们尝试运行你的 My Application 应用程序。我假设已将你的实际 Android 移动设备与计算机连接。要从 Android Studio 运行该应用程序,请打开项目中的一个活动文件,并单击工具栏中的“运行”图标。选择你的移动设备作为选项,然后查看移动设备,它将显示以下屏幕:

call12

现在,使用“通话”按钮进行拨号,如下所示:

call2