天天看点

android7.0请求权限,Android7.0动态申请打电话的权限

新建一个Android工程,在布局文件里面加入一个拨打电话按钮。

android7.0请求权限,Android7.0动态申请打电话的权限

点击拨打电话之后,弹出对话框让用户选择是否允许申请权限。

android7.0请求权限,Android7.0动态申请打电话的权限

当用户点击YES之后,就向系统申请权限。

android7.0请求权限,Android7.0动态申请打电话的权限

布局文件如下,在布局文件中加入按钮,同时注册响应事件,callButtonClickAction:

Manifest.xml文件,添加android.permission.CALL_PHONE打电话的权限。

下面是MainActivity.java的代码,注意看代码注释,注释写的很详细

import android.Manifest;

import android.app.Dialog;

import android.content.Context;

import android.content.DialogInterface;

import android.content.Intent;

import android.content.pm.PackageManager;

import android.net.Uri;

import android.os.Build;

import android.support.v4.app.ActivityCompat;

import android.support.v4.content.ContextCompat;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Toast;

import comnii.activity.type.RequestPermissionType;

import comnii.activity.util.DialogUtil;

public class MainActivity extends AppCompatActivity

{

private Context mContext;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

this.mContext = this;

}

public void callButtonClickAction(View view)

{

//先new出一个监听器,设置好监听

DialogInterface.OnClickListener dialogOnclicListener = new DialogInterface.OnClickListener()

{

@Override

public void onClick(DialogInterface dialog, int which)

{

switch (which)

{

case Dialog.BUTTON_POSITIVE:

Toast.makeText(MainActivity.this, "Yes" + which, Toast.LENGTH_SHORT).show();

requestPermission();

break;

case Dialog.BUTTON_NEGATIVE:

Toast.makeText(MainActivity.this, "No" + which, Toast.LENGTH_SHORT).show();

break;

case Dialog.BUTTON_NEUTRAL:

Toast.makeText(MainActivity.this, "Cancel" + which, Toast.LENGTH_SHORT).show();

break;

}

}

};

//弹窗让用户选择,是否允许申请权限

DialogUtil.showConfirm(mContext, "申请权限", "是否允许获取打电话权限?", dialogOnclicListener, dialogOnclicListener);

}

private void requestPermission()

{

//判断Android版本是否大于23

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)

{

int checkCallPhonePermission = ContextCompat.checkSelfPermission(mContext, Manifest.permission.CALL_PHONE);

if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED)

{

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE},

RequestPermissionType.REQUEST_CODE_ASK_CALL_PHONE);

return;

}

else

{

callPhone();

}

}

else

{

callPhone();

}

}

@Override

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)

{

switch (requestCode)

{

case RequestPermissionType.REQUEST_CODE_ASK_CALL_PHONE:

if (grantResults[0] == PackageManager.PERMISSION_GRANTED)

{

callPhone();

}

else

{

// Permission Denied

Toast.makeText(MainActivity.this, "CALL_PHONE Denied", Toast.LENGTH_SHORT).show();

}

break;

default:

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

}

}

private void callPhone()

{

Intent intent = new Intent();

intent.setAction(Intent.ACTION_CALL);

intent.setData(Uri.parse("tel:10086"));

startActivity(intent);

}

}

DialogUtil,java是是弹窗工具类

package comnii.activity.util;

import android.app.Activity;

import android.app.AlertDialog;

import android.content.Context;

import android.content.DialogInterface;

import android.view.WindowManager;

public class DialogUtil

{

public static AlertDialog showAlert(Context context, String title, String message,

String confirmButton, DialogInterface.OnClickListener confirmButtonClickListener,

String centerButton, DialogInterface.OnClickListener centerButtonClickListener,

String cancelButton, DialogInterface.OnClickListener cancelButtonClickListener,

DialogInterface.OnShowListener onShowListener, boolean cancelable,

DialogInterface.OnCancelListener onCancelListener,

DialogInterface.OnDismissListener onDismissListener)

{

AlertDialog.Builder promptBuilder = new AlertDialog.Builder(context);

if (title != null)

{

promptBuilder.setTitle(title);

}

if (message != null)

{

promptBuilder.setMessage(message);

}

if (confirmButton != null)

{

promptBuilder.setPositiveButton(confirmButton, confirmButtonClickListener);

}

if (centerButton != null)

{

promptBuilder.setNeutralButton(centerButton, centerButtonClickListener);

}

if (cancelButton != null)

{

promptBuilder.setNegativeButton(cancelButton, cancelButtonClickListener);

}

promptBuilder.setCancelable(true);

if (cancelable)

{

promptBuilder.setOnCancelListener(onCancelListener);

}

AlertDialog alertDialog = promptBuilder.create();

if (!(context instanceof Activity))

{

alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

}

alertDialog.setOnDismissListener(onDismissListener);

alertDialog.setOnShowListener(onShowListener);

alertDialog.show();

return alertDialog;

}

public static AlertDialog showConfirm(Context context, String title, String message,

DialogInterface.OnClickListener confirmButtonClickListener,

DialogInterface.OnClickListener cancelButtonClickListener)

{

return showAlert(context, title, message, "Yes",

confirmButtonClickListener, null, null, "No", cancelButtonClickListener, null, true, null, null);

}

public static AlertDialog showPrompt(Context context, String message, String confirmButton)

{

return showAlert(context, null, message, confirmButton, null, null, null, null, null, null, true, null, null);

}

public static AlertDialog showPrompt(Context context, String message)

{

return showAlert(context, null, message, "OK", null, null, null, null, null, null, true, null, null);

}

}

RequestPermissionType.java是申请的权限Code

public interface RequestPermissionType

{

int REQUEST_CODE_ASK_CALL_PHONE = 100;

}