Android权限在AndroidManifest.xml
中声明,
、
、
和
,其中最常用的是
以上四个标签必须是根元素manifest的直接子元素
<manifest>
<application>appliacation>
<permission />
<permission-group />
<permission-tree />
<uses-permission />
manifest>
预定义权限,官方文档
列出几个常见权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
每个app都有自己的内部存储区,其他app不能访问,另外还有app外部的公共存储区。
出于习惯,/sdcard指的是手机内部固化的存储区域,是可申请访问的公共存储区。(对应上面说到的应用外部存储)存储权限
自定义权限
代表一组permission
为一组permission声明一个namespace
是否需要某种硬件或软件资源
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
MainActivity.java需添加import android.Manifest;否则权限名会报错
// 状态码
private static int REQUEST_PERMISSION_CODE = 1;
// 权限数组,需要的权限
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 请求权限
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
if (ActivityCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this,
PERMISSIONS_STORAGE, REQUEST_PERMISSION_CODE);
}
}
onRequestPermissionResult
回调第二步弹出选择框,作出选择后执行onRequestPermissionResult回调函数,获取选择的结果再进行相关操作
如果在第二步添加后续操作,是不会等待选择完成再进行后续操作,这个过程是异步的,容易出现问题。所以一般是在执行onRequestPermissionResult确认获取权限之后,再进行相关函数的执行。