安卓拨号器的实现

1、编写MainActivity类

package com.example.myapplication;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;


import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.view.View;

import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {

    private EditText et_number;
    private final int PREMISSION_CALL_PHONE = 100; //声明拨打电话权限
    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.hellow_world);
            setContentView((R.layout.dhbhq));
        //拨打电话步骤
        //1、找到我们关心的控键   edittext button
        et_number = findViewById(R.id.editTextTextPersonName);
        //2、找到按钮
        Button btnCall = findViewById(R.id.callPhoneBtn);
        //3、给button按钮设置一个点击事件
        btnCall.setOnClickListener(new MyClickListener());
    }


    //定义一个类去实现按钮需要的接口类型
    private class MyClickListener implements View.OnClickListener{

        //当按钮被点击当时候调用
        @Override
        public void onClick(View view) {
            //4、获取et_number文本内容
            String number = et_number.getText().toString().trim();
            if("".equals(number)){
                /*
                context 上下文
                * */
                Toast.makeText(MainActivity.this,"number不能为空",Toast.LENGTH_LONG).show();
            }
            //5、进行拨打电话、意图Intent
            intent = new Intent();   //创建一个意图对象  打   猫、狗、电话
            //5.1设置动作
            intent.setAction(Intent.ACTION_CALL);
            //5.2设置要拨打打数据
            /*
            * url:同意资源定位符
            * uri:同意资源标示符
            * */
            intent.setData(Uri.parse("tel:" + number));
            if(checkReadPermission("android.permission.CALL_PHONE", intent)){
                //调用拨打电话函数
                call();
            }

        }
    }

    /**
     * 判断是否有某项权限
     * @param context   传过来到this对象
     * @param string_permission 权限
     * @param request_code 请求码
     * @return
     */
    public boolean checkReadPermission(String string_permission, Intent intent) {
        boolean flag = false;
        if (ContextCompat.checkSelfPermission(MainActivity.this, string_permission) == PackageManager.PERMISSION_GRANTED) {//已有权限\
            flag = true;
        } else {//申请权限
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{string_permission},PREMISSION_CALL_PHONE);
        }
        return flag;
    }

    /**
     * 检查权限后的回调
     * @param requestCode 请求码
     * @param permissions  权限
     * @param grantResults 结果
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            if (permissions.length != 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {//权限被禁用
                Toast.makeText(this, "请允许拨号权限后再试", Toast.LENGTH_SHORT).show();
            } else {//添加权限成功
                switch (requestCode) {
                    case PREMISSION_CALL_PHONE:
                        call();
                        break;
                }
            }
    }

    /**
     * 拨打电话(直接拨打)
     * @param telPhone 电话
     */
    public void call(){
        startActivity(intent);
    }
}

2、在AndroidMainifest中添加权限

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

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="26"/>
     //添加这俩行
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>


    <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=".baseActivity.BaseActivity" />

    </application>


</manifest>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值