大佬教程收集整理的这篇文章主要介绍了Android 基础-2.0 拔打电话号码,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
1、添加权限
<uses-permission android:name="android.permission.Call_PHONE"/>
<?xml version="1.0" encoding="utf-8"?> <androidx.consTraintlayout.widget.ConsTraintLayout xmlns:android="http://scheR_2_11845@as.android.com/apk/res/android" xmlns:app="http://scheR_2_11845@as.android.com/apk/res-auto" xmlns:tools="http://scheR_2_11845@as.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/tv_phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:text="@String/textPhone" app:layout_consTraintStart_toStartOf="parent" app:layout_consTraintTop_toTopOf="parent" /> <EditText android:id="@+id/et_phone" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:layout_marginRight="10dp" android:hint="@String/textPhoneHint" app:layout_consTraintEnd_toEndOf="parent" app:layout_consTraintStart_toStartOf="parent" app:layout_consTraintTop_toBottomOf="@+id/tv_phone" /> <Button android:id="@+id/btn_call" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="16dp" android:text="@String/textPhoneButton" app:layout_consTraintStart_toStartOf="parent" app:layout_consTraintTop_toBottomOf="@+id/et_phone" /> </androidx.consTraintlayout.widget.ConsTraintLayout>
public class MainActivity extends BaseActivity { private Button eBtCall; private EditText mEtPhone; @Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); setContentView(R.layout.activity_main); eBtCall = findViewById(R.id.btn_call); mEtPhone = findViewById(R.id.et_phonE); eBtCall.setOnClickListener(new View.onClickListener() { @Override public void onClick(View v) { performCodeWithPermission("拔打电话权限",new PermissionCallBACk() { @Override public void hasPermission() { Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + mEtPhone.getText())); startActivity(intent); } @Override public void noPermission() { } },Manifest.permission.Call_PHONE); } }); } }
4、这里要注意,安卓在6.0之后是动态申请系统权限,因而封装一个权限的BaseActivity类,专门用于处理权限相关的。
package com.jiangys.telephonedial; import android.content.DialogInterface; import android.content.pm.PackageManager; import android.os.build; import android.widget.Toast; import androidx.Annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; /** * @author Admin * @version $Rev$ * @des ${TODO} * @updateAuthor $Author$ * @updateDes ${TODO} */ public class BaseActivity extends AppCompatActivity { //**************** Android M Permission (Android 6.0权限控制代码封装) private int permissionrequestCode = 88; private PermissionCallBACk permissionRunnable; public interface PermissionCallBACk { void hasPermission(); void noPermission(); } /** * Android M运行时权限请求封装 * * @param permissionDes 权限描述 * @param runnable 请求权限回调 * @param permissions 请求的权限(数组类型),直接从Manifest中读取相应的值,比如Manifest.permission.WRITE_CONTACTS */ public void performCodeWithPermission(@NonNull String permissionDes,PermissionCallBACk runnable,@NonNull String... permissions) { if (permissions == null || permissions.length == 0) return; // this.permissionrequestCode = requestCode; this.permissionRunnable = runnable; if ((Build.VERSION.SDK_INT < Build.VERSION_CODEs.M) || checkPermissionGranted(permissions)) { if (permissionRunnable != null) { permissionRunnable.hasPermission(); permissionRunnable = null; } } else { //permission has not been granted. requestPermission(permissionDes,permissionrequestCode,permissions); } } private @R_450_8487@an checkPermissionGranted(String[] permissions) { @R_450_8487@an flag = true; for (String p : permissions) { if (ActivityCompat.checkSelfPermission(this,p) != PackageManager.PERMISSION_GRANTED) { flag = false; break; } } return flag; } private void requestPermission(String permissionDes,final int requestCode,final String[] permissions) { if (shouldShowrequestPermissionRationale(permissions)) { /*1. 第一次请求权限时,用户拒绝了,下一次:shouldShowrequestPermissionRationale() 返回 true,应该显示一些为什么需要这个权限的说明 2.第二次请求权限时,用户拒绝了,并选择了“不在提醒”的选项时:shouldShowrequestPermissionRationale() 返回 false 3. 设备的策略禁止当前应用获取这个权限的授权:shouldShowrequestPermissionRationale() 返回 false*/ // Provide an additional rationale to the user if the permission was not granted // and the user would benefit from additional context for the use of the permission. // For example,if the request has been denied prevIoUsly. // Snackbar.make(getWindow().getDecorView(),requestName,// Snackbar.LENGTH_INDEFINITE) // .setAction(R.String.common_ok,new View.onClickListener() { // @Override // public void onClick(View view) { // ActivityCompat.requestPermissions(BaseAppCompatActivity.this,// permissions,// requestCodE); // } // }) // .show(); //如果用户之前拒绝过此权限,再提示一次准备授权相关权限 new AlertDialog.builder(this) .settitle("提示") .setmessage(permissionDes) .setPositiveButton("授权",new DialogInterface.onClickListener() { @Override public void onClick(DialogInterface dialog,int which) { ActivityCompat.requestPermissions(BaseActivity.this,permissions,requestCodE); } }).show(); } else { // Contact permissions have not been granted yet. request them directly. ActivityCompat.requestPermissions(BaseActivity.this,requestCodE); } } private @R_450_8487@an shouldShowrequestPermissionRationale(String[] permissions) { @R_450_8487@an flag = false; for (String p : permissions) { if (ActivityCompat.shouldShowrequestPermissionRationale(this,p)) { flag = true; break; } } return flag; } /** * CallBACk received when a permissions request has been completed. */ @Override public void onrequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) { if (requestCode == permissionrequestCodE) { if (verifyPermissions(grantResults)) { if (permissionRunnable != null) { permissionRunnable.hasPermission(); permissionRunnable = null; } } else { Toast.makeText(this,"暂无权限执行相关操作!",Toast.LENGTH_SHORT).show(); if (permissionRunnable != null) { permissionRunnable.noPermission(); permissionRunnable = null; } } } else { super.onrequestPermissionsResult(requestCode,grantResults); } } public @R_450_8487@an verifyPermissions(int[] grantResults) { // at least one result must be checked. if (grantResults.length < 1) { return false; } // Verify that each required permission has been granted,otherwise return false. for (int result : grantResults) { if (result != PackageManager.PERMISSION_GRANTED) { return false; } } return true; } //********************** END Android M Permission **************************************** }
以上是大佬教程为你收集整理的Android 基础-2.0 拔打电话号码全部内容,希望文章能够帮你解决Android 基础-2.0 拔打电话号码所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。