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方法,用于在申请权限同意后执行的内容
上面代码的逻辑是这样的:
点击拨号按钮,先检查有没有拨号权限,如果有权限就直接拨号
如果没有权限,就申请权限,如果不同意,就提示没有权限,如果同意,那么就开通权限,然后拨号。