【移动应用开发技术】怎么禁止Android权限_第1页
【移动应用开发技术】怎么禁止Android权限_第2页
【移动应用开发技术】怎么禁止Android权限_第3页
【移动应用开发技术】怎么禁止Android权限_第4页
【移动应用开发技术】怎么禁止Android权限_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】怎么禁止Android权限

这篇文章将为大家详细讲解有关怎么禁止Android权限,在下觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Android权限Android安全架构规定:默认情况下,任何应用都没有权限执行对其他应用、操作系统或用户有不利影响的任何操作。这包括读写用户的私有数据(联系人,短信,相册,位置)、读写其他应用的文件、执行网络访问、使设备保持唤醒状态等等。如果是一些正常的权限(非高危权限),比如网络访问等在应用清单文件(AndroidManifest.xml)中配置,系统会自动授予,但是如果有一些高危权限,位置,文件存储,短信等这个时候系统会要求用户授予权限,Android发出权限请求的方式取决于系统版本:1、如果设备运行的是Android6.0(Marshmallow,API23)或更高版本,并且应用的targetSdkVersion是23或更高版本,则应用将在运行时向用户请求权限(RuntimePermissions)。用户可随时撤销权限,因此应用每次运行时都应该检查自身是否具备所需的权限。2、如果设备运行的是Android5.1(LOLLIPOP_MR1,API22)或更低版本,并且应用的targetSdkVersion是22或更低版本,则系统在用户安装应用时就要求用户授予权限。如果更新应用时又新增了权限,系统会在用户更新应用时要求授予该权限。用户一旦安装应用,他们撤销权限的唯一方式是卸载应用。如果我们程序中某些功能,发布一些图片等操作,这个时候避免不了要访问用户设备的图片,但是用户开始的时候禁止了,用户并不知道,这个时候访问就会有问题了,那么怎样去提示用户并且引导用户去授予这些权限呢,看下面的效果(说的再多都不如图来的实际)下面就开始撸码了private

void

getpermission()

{

//两个日历权限和一个数据读写权限

String[]

permissions

=

new

String[]{Manifest.permission.ACCESS_FINE_LOCATION,

Manifest.permission.READ_PHONE_STATE,

Manifest.permission.WRITE_EXTERNAL_STORAGE,

Manifest.permission.CAMERA};

//

PermissionsUtils.showSystemSetting

=

true;//是否支持显示系统设置权限设置窗口跳转

//这里的this不是上下文,是Activity对象!

PermissionsUtils.getInstance().chekPermissions(this,

permissions,

permissionsResult);

}首先在页面Activity启动之后调用这个方法(注意:数组中的权限可以自己配置,这里我写了四个)权限监听接口对象//创建监听权限的接口对象

PermissionsUtils.IPermissionsResult

permissionsResult

=

new

PermissionsUtils.IPermissionsResult()

{

@Override

public

void

passPermissons()

{

//权限通过执行的方法

//权限通过验证

}

@Override

public

void

forbitPermissons()

{

//这是没有通过权限的时候提示的内容,自定义即可

Toast.makeText(mContext,

"您没有允许部分权限,可能会导致部分功能不能正常使用,如需正常使用

请允许权限",

Toast.LENGTH_SHORT).show();

finish();

//

Tool.exitApp();

}

};还需要在activity中重写一个方法@Override

public

void

onRequestPermissionsResult(int

requestCode,

@NonNull

String[]

permissions,

@NonNull

int[]

grantResults)

{

super.onRequestPermissionsResult(requestCode,

permissions,

grantResults);

//就多一个参数this

PermissionsUtils.getInstance().onRequestPermissionsResult(this,

requestCode,

permissions,

grantResults);

}权限以及弹窗设置权限工具类PermissionsUtils.java/**

*

权限工具类

*/

public

class

PermissionsUtils

{

private

final

int

mRequestCode

=

100;//权限请求码

public

static

boolean

showSystemSetting

=

true;

private

PermissionsUtils()

{

}

private

static

PermissionsUtils

permissionsUtils;

private

IPermissionsResult

mPermissionsResult;

public

static

PermissionsUtils

getInstance()

{

if

(permissionsUtils

==

null)

{

permissionsUtils

=

new

PermissionsUtils();

}

return

permissionsUtils;

}

public

void

chekPermissions(Activity

context,

String[]

permissions,

@NonNull

IPermissionsResult

permissionsResult)

{

mPermissionsResult

=

permissionsResult;

if

(Build.VERSION.SDK_INT

<

23)

{

//6.0才用动态权限

permissionsResult.passPermissons();

return;

}

//创建一个mPermissionList,逐个判断哪些权限未授予,未授予的权限存储到mPerrrmissionList中

List<String>

mPermissionList

=

new

ArrayList<>();

//逐个判断你要的权限是否已经通过

for

(int

i

=

0;

i

<

permissions.length;

i++)

{

if

(ContextCompat.checkSelfPermission(context,

permissions[i])

!=

PackageManager.PERMISSION_GRANTED)

{

mPermissionList.add(permissions[i]);//添加还未授予的权限

}

}

//申请权限

if

(mPermissionList.size()

>

0)

{//有权限没有通过,需要申请

ActivityCompat.requestPermissions(context,

permissions,

mRequestCode);

}

else

{

//说明权限都已经通过,可以做你想做的事情去

permissionsResult.passPermissons();

return;

}

}

//请求权限后回调的方法

//参数:

requestCode

是我们自己定义的权限请求码

//

参数:

permissions

是我们请求的权限名称数组

//

参数:

grantResults

是我们在弹出页面后是否允许权限的标识数组,数组的长度对应的是权限名称数组的长度,数组的数据0表示允许权限,-1表示我们点击了禁止权限

public

void

onRequestPermissionsResult(Activity

context,

int

requestCode,

@NonNull

String[]

permissions,

@NonNull

int[]

grantResults)

{

boolean

hasPermissionDismiss

=

false;

//有权限没有通过

if

(mRequestCode

==

requestCode)

{

for

(int

i

=

0;

i

<

grantResults.length;

i++)

{

if

(grantResults[i]

==

-1)

{

hasPermissionDismiss

=

true;

}

}

//如果有权限没有被允许

if

(hasPermissionDismiss)

{

if

(showSystemSetting)

{

showSystemPermissionsSettingDialog(context);//跳转到系统设置权限页面,或者直接关闭页面,不让他继续访问

}

else

{

mPermissionsResult.forbitPermissons();

}

}

else

{

//全部权限通过,可以进行下一步操作。。。

mPermissionsResult.passPermissons();

}

}

}

/**

*

不再提示权限时的展示对话框

*/

AlertDialog

mPermissionDialog;

private

void

showSystemPermissionsSettingDialog(final

Activity

context)

{

final

String

mPackName

=

context.getPackageName();

if

(mPermissionDialog

==

null)

{

mPermissionDialog

=

new

AlertDialog.Builder(context).setMessage("已禁用权限,请手动授予").setPositiveButton("设置",

new

DialogInterface.OnClickListener()

{

@Override

public

void

onClick(DialogInterface

dialog,

int

which)

{

cancelPermissionDialog();

Uri

packageURI

=

Uri.parse("package:"

+

mPackName);

Intent

intent

=

new

Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,

packageURI);

context.startActivity(intent);

context.finish();

}

}).setNegativeButton("取消",

new

DialogInterface.OnClickListener()

{

@Override

public

void

onClick(DialogInterface

dialog,

int

which)

{

//关闭页面或者做其他操作

cancelPermissionDialog();

//mContext.finish();

mPermissionsResult.forbitPermissons();

}

}).create();

}

mPermissionDialog.show();

//放在show()之后,不然有些属性是没有效果的,比如height和width

//以下代码设置解决弹窗不居中问题,一侧有边距,一侧没有

Window

dialogWindow

=

mPermissionDialog.getWindow();

WindowManager

m

=

context.getWindowManager();

Display

d

=

m.getDefaultDisplay();

//

获取屏幕宽、高

WindowManager.LayoutParams

p

=

dialogWindow.getAttributes();

//

获取对话框当前的参数值

//

设置宽度

p.width

=

(int)

(d.getWidth()

*

0.95);

//

宽度设置为屏幕的0.95

p.gravity

=

Gravity.CENTER;//设置位置

//p.alpha

=

0.8f;//设置透明度

dialogWindow.setAttributes(p);

}

//关闭对话框

private

void

cancelPerm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论