flutter 获取手机的权限---SD卡权限

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),
          )
        ],
      ),
    );
  }

最终效果图

发布了69 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/chentaishan/article/details/104149216