Flutter关于获取用户相关信息权限

包导入

本文用到的package均来自官方提供的Dart packages

首先在pubspec.yaml文件中引用并自动下载

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.2
  contacts_service: ^0.6.3
  image_picker: ^1.0.4
  permission_handler: ^11.0.1
  photo_manager: ^2.8.1
  geolocator: ^10.1.0

安卓权限声明

获取用户授权需要在安卓的包内声明方法,

找到工程路径下android/app/src/main/AndroidManifest.xml文件

确保在标签<manifest>内,<application>外声明

<!-- 获取通讯录权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />  
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<!-- 获取存储权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 获取地理位置 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

开发使用

以获取通讯录权限为示例,

import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:contacts_service/contacts_service.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ContactListScreen(),
    );
  }
}

class ContactListScreen extends StatefulWidget {
  @override
  _ContactListScreenState createState() => _ContactListScreenState();
}

class _ContactListScreenState extends State<ContactListScreen> {
  List<Contact> _contacts = [];

  @override
  void initState() {
    super.initState();
    _requestPermissions();
  }

  Future<void> _requestPermissions() async {
    // 请求通讯录权限
    var status = await Permission.contacts.request();

    if (status.isGranted) {
      // 权限已授予,执行获取联系人数据的操作
      _getContacts();
    } else {
      // 用户拒绝了权限请求,你可以在这里处理相应的逻辑
      print('Permission denied by user.');
    }
  }

  Future<void> _getContacts() async {
    // 获取联系人
    Iterable<Contact> contacts = await ContactsService.getContacts();
    setState(() {
      _contacts = contacts.toList();
    });

    // 打印通讯录信息到控制台
    for (var contact in _contacts) {
      print('Name: ${contact.displayName ?? ''}');
      for (var phone in contact.phones ?? []) {
        print('   Phone: ${phone.value ?? ''}');
      }
      print('---');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Contact List'),
      ),
      body: _contacts.isNotEmpty
          ? ListView.builder(
              itemCount: _contacts.length,
              itemBuilder: (context, index) {
                return ListTile(
                  title: Text(_contacts[index].displayName ?? ''),
                  subtitle: Text(_contacts[index].phones?.isNotEmpty == true
                      ? _contacts[index].phones!.first.value ?? ''
                      : ''),
                );
              },
            )
          : Center(
              child: Text('No contacts available.'),
            ),
    );
  }
}

一些解释

permission_handler提供了获取安卓权限的方法,通过直接使用该模块可以直接监听用户是否授权相应权限。该模块可以请求获取蓝牙/外设/短信/通讯录/地理位置等等权限。

contacts_service主要用来整合信息。和ListView组件联动有很棒的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值