Android编写电话拨号器

一、实现步骤

1.需要创建拨号意图

Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + 需要拨打的电话号码));
startActivity(intent);

2.权限允许

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

3. Android6.0 之后需要动态授权

ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.CALL_PHONE},0x11);

二、示例工程

1.搭建Ui(代码如下)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editTextTextPersonName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:ems="10"
        android:inputType="number"
        android:maxLength="11"
        android:hint="请输入电话号码"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="拨打电话"
        android:onClick="OnClickButton"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editTextTextPersonName" />
</androidx.constraintlayout.widget.ConstraintLayout>

2.实现拨号功能(代码如下)

package com.hiscene.androiddemo;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import static android.content.pm.PackageManager.PERMISSION_GRANTED;

public class MainActivity extends AppCompatActivity {

    private EditText editText;
    private final Activity activity = this;
    //授权请求码
    private static final int PERMISSIONS_CODE = 656;
    private String number;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = findViewById(R.id.editTextTextPersonName);
    }

    //按钮点事件
    public void OnClickButton(View view) {
        switch (view.getId()) {
            case R.id.button:

                //获取输入的电话号码
                number = editText.getText().toString().trim();
                //检查是否有拨号权限,没有就动态申请
                RequestPermissions(PERMISSIONS_CODE, new String[]{Manifest.permission.CALL_PHONE});
                break;
        }
    }

    //拨打电话
    private void CallPhone() {
        if (number == null || "".equals(number)) {

            Toast.makeText(activity, "拨号失败,号码为空!", Toast.LENGTH_LONG).show();
            return;
        }

        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:" + number));
        startActivity(intent);
    }

    //请求权限
    public void RequestPermissions(int requestCode, String[] permissions) {

        //android6.0 及以上机型
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            boolean needPermission = false;
            for (String permisson : permissions) {
                if (activity.checkSelfPermission(permisson) != PackageManager.PERMISSION_GRANTED) {
                    needPermission = true;
                    break;
                }
            }
            if (needPermission) {
                //用户没有权限,动态请求权限
                activity.requestPermissions(permissions, requestCode);
            } else {
                CallPhone();
            }
        }
        //android6.0 以下机型
        else {
            CallPhone();
        }
    }

    //授权回调
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == PERMISSIONS_CODE) {
            for (int i = 0; i < permissions.length; i++) {
                String s = permissions[i];
                if (grantResults[i] != PERMISSION_GRANTED) {
                    //用户拒绝授权
                    Toast.makeText(activity, "拨号失败,需要拨号权限!", Toast.LENGTH_LONG).show();
                } else {
                    CallPhone();
                }
            }
        }
    }
}

三、资料下载

1.源码下载链接:https://pan.baidu.com/s/1Uohmx29kgLqCjjRinucgvA  密码:rj51

猜你喜欢

转载自blog.csdn.net/a451319296/article/details/109409880