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

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

d12393471cbbcf46a54b7045d8713ba2.png

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

5559eced38759f5140515d2f2750cd11.png

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

e501927b30e3888f2f6c675bd4e6baab.png

布局文件如下,在布局文件中加入按钮,同时注册响应事件,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

{

/**

* context

*/

private Context mContext;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

this.mContext = this;

}

/**

* 点击打电话的按钮响应事件

*

* @param view view

*/

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();

}

}

/**

* 注册权限申请回调

* @param requestCode 申请码

* @param permissions 申请的权限

* @param grantResults 结果

*/

@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;

/**

* 对话框工具箱

*

* @author xiaopan

*/

public class DialogUtil

{

/**

* 显示一个对话框

*

* @param context 上下文对象,最好给Activity,否则需要android.permission.SYSTEM_ALERT_WINDOW

* @param title 标题

* @param message 消息

* @param confirmButton 确认按钮

* @param confirmButtonClickListener 确认按钮点击监听器

* @param centerButton 中间按钮

* @param centerButtonClickListener 中间按钮点击监听器

* @param cancelButton 取消按钮

* @param cancelButtonClickListener 取消按钮点击监听器

* @param onShowListener 显示监听器

* @param cancelable 是否允许通过点击返回按钮或者点击对话框之外的位置关闭对话框

* @param onCancelListener 取消监听器

* @param onDismissListener 销毁监听器

* @return 对话框

*/

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;

}

/**

* 显示一个对话框

*

* @param context 上下文对象,最好给Activity,否则需要android.permission.SYSTEM_ALERT_WINDOW

* @param title 标题

* @param message 消息

* @param confirmButtonClickListener 确认按钮点击监听器

* @param cancelButtonClickListener 取消按钮点击监听器

* @return 对话框

*/

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);

}

/**

* 显示一个提示框

*

* @param context 上下文对象,最好给Activity,否则需要android.permission.SYSTEM_ALERT_WINDOW

* @param message 提示的消息

* @param confirmButton 确定按钮的名字

*/

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);

}

/**

* 显示一个提示框

*

* @param context 上下文对象,最好给Activity,否则需要android.permission.SYSTEM_ALERT_WINDOW

* @param message 提示的消息

*/

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

/**

* Created by wzj on 2017/2/19.

*/

public interface RequestPermissionType

{

/**

* 请求打电话的权限码

*/

int REQUEST_CODE_ASK_CALL_PHONE = 100;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值