权限是一个安全机制,它可以保护用户隐私。当应用需要用到一些存在一定安全风险的系统特性时,会及时告知用户,让用户来做最后的选择。
权限询问出现的场景
(1)安装应用时
(2)6.0以上程序运行时
权限的使用方法
AndroidMainfest.xml
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
常用的权限
权限的使用方法——Android6.0运行时权限处理
普通权限
危险权限
前提:targetSDKVersion>=23并且手机系统>=6.0
1、在Androidmainfest.xml中声明需要申请的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2、在代码中加入申请权限的方法
checkSelfPermission//获取权限是否已被授权的状态
requestPermissions//出现弹出窗请求用户授权权限
shouldShowRequestPermissionRationale//是否需要需要为某个权限授权说明原因
onRequestPermissionsResult//授权结果回调
//获取权限是否被授权的状态
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// 说明需要申请该权限的理由
Toast.makeText(MainActivity.this, "我真的需要这个权限",
Toast.LENGTH_SHORT).show();
// 再次申请需要的权限
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
} else {
//弹出框弹出是否授权
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
}
} else {
new Thread(new Runnable() {
@Override
public void run() {
doWriteDisk();
}
}).start();
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE:
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限同意了
Toast.makeText(this, "权限同意了", Toast.LENGTH_SHORT).show();
new Thread(new Runnable() {
@Override
public void run() {
doWriteDisk();
}
}).start();
} else {
// 权限不同意
Toast.makeText(this, "权限不同意无法执行该操作", Toast.LENGTH_SHORT).show();
}
return;
}
}
注:手机系统<6.0 手机权限都是默认授予的,并且无法取消,手机系统>6.0手机权限可以取消。
targetSDKVersion<23 危险权限都是默认授予的。
自定义权限
应用B跳转应用A
应用A
<permission android:name="com.netease.study.permission.start" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:permission="com.netease.study.permission.start">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
应用B
<uses-permission android:name="com.netease.study.permission.start"/>
Intent intent = new Intent();
intent.setClassName("com.netease.study.custompermission", "com.netease.study.custompermission.MainActivity");
startActivity(intent);
自定义权限属性