1 实验名称
打电话
2 实验目的
掌握使用Intent对象的调用系统提供的各种服务,动态获取系统权限
3 实验源代码
布局文件代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:id="@+id/numberET"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="在此输入电话号码"
/>
<Button
android:id="@+id/callBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="tel:"
/>
</LinearLayout>
Java代码:
package com.example.calltest;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
public class MainActivity extends AppCompatActivity {
private EditText numberET = null;
private Button callBtn = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
numberET = findViewById(R.id.numberET);
callBtn = findViewById(R.id.callBtn);
callBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {//如果未取得拨号权限的授权的情况下
//申请获取拨号的权限
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
} else {
dail();//直接调用拨号方法
}
}
});
}
//定义调用系统拨号功能的方法
private void dail() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);//指定意图的动作是拨号
intent.setData(Uri.parse("tel:" + numberET.getText().toString().trim()));
startActivity(intent);//启动拨号组件
}
//定义当用户拒绝了拨号权限后的处理方法
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
dail();
} else {
Toast.makeText(MainActivity.this, "你拒绝了拨号权限,无法执行拨号功能!", Toast.LENGTH_LONG).show();
}
}
}
}
4 实验运行结果图
5 实验总结
先写布局文件,界面也很简单,主要是由文本编辑框和按钮组成。号码拨出后的界面就是我们熟悉的通话界面。
Java代码实现的过程中,如果未取得拨号权限的授权的情况下,先申请拨号权限,然后调用拨号方法;关于调用系统拨号功能,指定意图的动作是拨号,启动拨号组件;如果用户拒绝了拨号权限后的处理方法,则无法执行拨号功能。
标签:core,权限,androidx,拨号,技术开发,import,打电话,移动,android From: https://blog.csdn.net/cxx0316/article/details/142534057