安卓获取手机通讯录php,Flutter获取手机通讯录联系人,支持iOS和Android

Flutter 通讯录联系人选择器,同时支持Android和iOS,可以打开Native通讯录选择联系人,也可以返回通讯录列表,自己构建UI。

用法

添加这一行到pubspec.yaml

easy_contact_picker: ^0.0.2

引用

import 'package:easy_contact_picker/easy_contact_picker.dart';

权限添加

Android

iOS

info.plist中添加读取通讯录权限

Privacy - Contacts Usage Description

Background Modes中 Background fetch 和 Remote notification打对勾

示例

调Native通讯录方法

Future> selectContacts() async {

final List result =

await _channel.invokeMethod('selectContactList');

if (result == null) {

return null;

}

List contacts = new List();

result.forEach((f){

contacts.add(new Contact.fromMap(f));

});

return contacts;

}

返回通讯录联系人List

Future selectContactWithNative() async {

final Map result =

await _channel.invokeMethod('selectContactNative');

if (result == null) {

return null;

}

return new Contact.fromMap(result);

}

需要获取权限,本示例使用的申请权限参考

# 权限申请

permission_handler: '^3.2.0'

权限使用方法

_openAddressBook() async{

// 申请权限

Map permissions = await PermissionHandler().requestPermissions([PermissionGroup.contacts]);

// 申请结果

PermissionStatus permission = await PermissionHandler().checkPermissionStatus(PermissionGroup.contacts);

//granted表示申请成功

if (permission == PermissionStatus.granted){

}

}

访问Native通讯录示例

class HostPage extends StatefulWidget {

@override

_HostPageState createState() => _HostPageState();

}

class _HostPageState extends State with AutomaticKeepAliveClientMixin{

Contact _contact = new Contact(fullName: "", phoneNumber: "");

final EasyContactPicker _contactPicker = new EasyContactPicker();

_openAddressBook() async{

// 申请权限

Map permissions = await PermissionHandler().requestPermissions([PermissionGroup.contacts]);

// 申请结果

PermissionStatus permission = await PermissionHandler().checkPermissionStatus(PermissionGroup.contacts);

if (permission == PermissionStatus.granted){

_getContactData();

}

}

_getContactData() async{

Contact contact = await _contactPicker.selectContactWithNative();

setState(() {

_contact = contact;

});

}

@override

Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(

title: Text("首页"),

),

body: Column(

children: [

Padding(

padding: EdgeInsets.fromLTRB(13, 20, 13, 10),

child: Row(

children: [

Text("姓名:"),

Text(_contact.fullName)

],

),

),

Padding(

padding: EdgeInsets.fromLTRB(13, 0, 13, 20),

child: Row(

children: [

Text("手机号:"),

Text(_contact.phoneNumber)

],

),

),

FlatButton(

child: Text("打开通讯录"),

onPressed: _openAddressBook,

)

],

),

);

}

@override

// TODO: implement wantKeepAlive

bool get wantKeepAlive => true;

}

获取通讯录联系人List示例

class AddressBookPage extends StatefulWidget {

@override

_AddressBookPageState createState() => _AddressBookPageState();

}

class _AddressBookPageState extends State with AutomaticKeepAliveClientMixin{

List _list = new List();

final EasyContactPicker _contactPicker = new EasyContactPicker();

@override

void initState() {

// TODO: implement initState

super.initState();

_openAddressBook();

}

@override

Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(

title: Text("通讯录"),

),

body: ListView.builder(

itemBuilder: (context, index){

return _getItemWithIndex(_list[index]);

},

itemCount: _list.length,

)

);

}

Widget _getItemWithIndex(Contact contact){

return Container(

height: 45,

padding: EdgeInsets.only(left: 13),

child: Column(

mainAxisAlignment: MainAxisAlignment.center,

crossAxisAlignment: CrossAxisAlignment.start,

children: [

Text(contact.fullName),

Text(contact.phoneNumber,

style: TextStyle(

color: Colors.grey,

),

),

],

),

);

}

_openAddressBook() async{

// 申请权限

Map permissions = await PermissionHandler().requestPermissions([PermissionGroup.contacts]);

// 申请结果

PermissionStatus permission = await PermissionHandler().checkPermissionStatus(PermissionGroup.contacts);

if (permission == PermissionStatus.granted){

_getContactData();

}

}

_getContactData() async{

List list = await _contactPicker.selectContacts();

setState(() {

_list = list;

});

}

@override

// TODO: implement wantKeepAlive

bool get wantKeepAlive => true;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值