flutter权限

本文深入探讨Flutter应用程序中如何处理Android权限。从基本的权限请求到动态权限管理,详细阐述了Flutter与Android系统的交互过程,帮助开发者更好地理解和实现Flutter应用的权限控制功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:toptongpin/app/common/widgets/dialog.dart';
import 'package:toptongpin/app/utils/log_util.dart';
import 'package:toptongpin/app/utils/toast_util.dart';

import '../res/colors.dart';

class Permissions {
  static List<String> _names(BuildContext context) {
    return <String>[
      ("日历"),
      ("相机"),
      ("联系人"),
      ("位置"),
      '位置权限',
      '位置权限',
      '媒体资料库',
      ("麦克风"),
      'phone',
      ("相册"),
      ("相册"),
      'reminders',
      'sensors',
      'sms',
      'speech',
      ("本地存储"),
      'ignoreBatteryOptimizations',
      '通知权限',
      'access_media_location',
      'activity_recognition',
      'unknown',
      'bluetooth',
      'manageExternalStorage',
      'systemAlertWindow',
      'requestInstallPackages',
      'appTrackingTransparency',
      'criticalAlerts',
      'accessNotificationPolicy',
      'bluetoothScan',
      'bluetoothAdvertise',
      'bluetoothConnect',
    ];
  }

  static Future<bool> checkPermission(BuildContext context, int value,
      {content = "", sub = ""}) async {
    var permissionStatus = await Permission.byValue(value).request();
    print("+++++++++++++++++" + permissionStatus.toString());
    if (permissionStatus.isLimited || permissionStatus.isGranted) {
      return true;
    } else if (permissionStatus.isDenied) {
      showPermissionConfirmDialog(context, value, content: content, sub: sub);
      return false;
    } else if (permissionStatus.isPermanentlyDenied) {
      //权限永久拒绝,且不在提示,需要进入设置界面,IOS和Android不同
      ToastUtil.error('请前往设置-权限设置中开启系统权限');
      return false;
    } else {
      PermissionStatus permissionStatus = await Permission.byValue(value).request();
      if (permissionStatus == PermissionStatus.granted ||
          permissionStatus == PermissionStatus.limited) {
        return true;
      } else {
        ToastUtil.error('请前往设置-权限设置中开启系统权限');
        return false;
      }
    }
  }

  static Future<bool> check(
      int value,
      ) async {
    PermissionStatus permissionStatus = await Permission.byValue(value).status;
    if (permissionStatus == PermissionStatus.granted ||
        permissionStatus == PermissionStatus.limited) {
      return true;
    } else {
      return false;
    }
  }


  static Future<bool> openSettings() {
    return openAppSettings();
  }

  static Future<dynamic> showPermissionConfirmDialog(
      BuildContext context, value,
      {content = "", sub = ""}) {
    final yoursItem = _names(context)[value];
    return showTipDialog(
        context: Get.context,
        content: content == "" ? "xx”想访问您的$yoursItem" : content,
        sub: sub == "" ? "" : sub,
        width: 592.w,
        fn1Text: "取消",
        fn2Text: "确定",
        fn1: () {
          Get.back();
        },
        fn2: () {
          Get.back();
          openAppSettings();
        },
        height: 392.w);
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值