版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】怎么禁止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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冷沉淀在化学工业中的应用策略
- 2024年租房合同模板参考5篇
- 2023年化妆品销售总结日报
- 2023年化学学科教学工作总结
- 慢病管理行业相关投资计划提议范本
- Γ-球蛋白三类相关行业投资方案
- 固废污染治理相关行业投资规划报告范本
- 大型袋式除尘器相关行业投资方案
- 幼儿园课件之大班数学《动物旅行社》
- 统部编版语文二年级上册第四单元达标测试卷(含答案)
- 小学美术 赣美版 二年级下册 第3课 《画房子》部优课件
- HL型弹性柱销联轴器
- F16半物理仿真实验指导书(4)
- 水库加固工程监理大纲
- 《我是一只小虫子》完整版PPT(共17页)课件
- 北师大版四年级下册《四边形分类》教学设计
- 大气商务趁年轻大干一场内部竞聘PPT模板课件
- 货车司机电话号码
- 采光井脚手架专项施工方案(26页)
- 荧光定量PCR之绝对定量分析——标准曲线的绘制参考模板
- (完整版)临床试验知情同意书模板
评论
0/150
提交评论