android中实现拨号功能

1、要实现拨号功能,首先需要开启拨号权限

修改AndroidManifest.xml文件,添加如下内容:

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

 

2、添加一个Activity活动,添加一个按钮,点击按钮,实现拨号功能

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="拨号" />
</android.support.constraint.ConstraintLayout>

MainActivity.java

 1 package com.example.chenrui.app1;
 2 
 3 import android.Manifest;
 4 import android.content.Intent;
 5 import android.content.pm.PackageManager;
 6 import android.net.Uri;
 7 import android.support.annotation.NonNull;
 8 import android.support.v4.app.ActivityCompat;
 9 import android.support.v4.content.ContextCompat;
10 import android.support.v7.app.AppCompatActivity;
11 import android.os.Bundle;
12 import android.view.View;
13 import android.widget.Button;
14 import android.widget.Toast;
15 
16 public class MainActivity extends AppCompatActivity {
17 
18     @Override
19     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
20         if(permissions.length!=0 && grantResults[0]!=PackageManager.PERMISSION_GRANTED ) {
21             Toast.makeText(MainActivity.this, "请允许拨号权限后重试", Toast.LENGTH_SHORT).show();
22         } else {
23             call("10086");
24         }
25     }
26 
27     @Override
28     protected void onCreate(Bundle savedInstanceState) {
29         super.onCreate(savedInstanceState);
30         setContentView(R.layout.activity_main);
31 
32         Button button = findViewById(R.id.button1);
33         button.setOnClickListener(new View.OnClickListener() {
34             @Override
35             public void onClick(View v) {
36                 if(ActivityCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CALL_PHONE)!=PackageManager.PERMISSION_GRANTED) {
37                     ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
38                 } else {
39                     call("10086");
40                 }
41             }
42         });
43 
44 
45     }
46 
47     public void call(String number) {
48         Intent intent = new Intent(Intent.ACTION_CALL);
49         intent.setData(Uri.parse("tel:" + number));
50         startActivity(intent);
51     }
52 }

 

上面的代码,实现拨号的功能其实只是第47-51行代码实现了拨号。

从Android6.0开始,除了需要配置权限外,还需要在代码中动态申请权限,第36-37行实现了申请拨号动态权限的功能,第36行是检查是否有拨号权限,第37行是指没有权限时申请权限。

第19-25行代码重写了onRequestPermissionsResult方法,用于在申请权限同意后执行的内容

 

上面代码的逻辑是这样的:

点击拨号按钮,先检查有没有拨号权限,如果有权限就直接拨号

如果没有权限,就申请权限,如果不同意,就提示没有权限,如果同意,那么就开通权限,然后拨号。

posted @ 2019-01-18 13:24  魔豆  阅读(3939)  评论(0编辑  收藏  举报