flutter是跨平台的移动技术,当然也摆脱不了设备的授权问题,如android 设备中清单文件里的各种权限配置,以及到Android 6.0 的动态权限配置,Flutter也有相对应的功能要处理。接下来基于Android系统读写SD的权限做一个简单的讲解。(相关IOS的权限请自行查阅)
1.清单文件配置权限
找到Android模块的清单文件,配置对应的sd卡权限。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2.配置动态权限,现在Android手机设备几乎全都是6.0以上的系统,所以免不了要配置动态权限。在flutter中,我们使用permission_handler: ^3.2.0 插件给大家演示效果。动态权限也分为几个部分;
- 检查当前应用是否已经拥有了相关权限
/**
* 检查是否有相关权限
*/
void checkPermissionStatus() {
final Future<PermissionStatus> statusFuture =
PermissionHandler().checkPermissionStatus(PermissionGroup.storage);
statusFuture.then((PermissionStatus status) {
setState(() {
_permissionStatus = status;
});
});
}
- 根据检查权限的结果,决定是否要请求权限的授权,也就是请求权限授权
/**
* 请求系统权限,让用户确认授权
*/
Future requestPermission() async {
List<PermissionGroup> permissions = <PermissionGroup>[
PermissionGroup.storage
];
Map<PermissionGroup, PermissionStatus> permissionMap =
await PermissionHandler().requestPermissions(permissions);
setState(() {
_permissionStatus = permissionMap[PermissionGroup.storage];
});
}
- 根据权限的结果,执行相关逻辑
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("检查读写SD卡权限"),
),
body: Column(
children: <Widget>[
RaisedButton(
child: Text("检查是否拥有权限--读写外部卡"),
onPressed: checkPermissionStatus,
),
Text(
"检查权限结果:" + hasPermissionText(_permissionStatus),
),
RaisedButton(
child: Text("请求权限"),
onPressed: requestPermission,
),
Text(
"获取权限结果:" + getPermissionResult(_permissionStatus),
)
],
),
);
}