import 'package:permission_handler/permission_handler.dart';
android>gradle.properties에
android.useAndroidX=true
android.enableJetifier=true 없으면 추가하기.
android>app>build.gradle에
compileSdkVersion 31 로 세팅하기
기존 문자가 있다면 그냥 넘어가기
android>app>src>main>AndroidManifest.xml에
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
추가하기
++ CONTACTS가 아닌 CAMERA등을 쓰면 카메라 권한도 된다나..
일단 뭐든 아이폰을 위한 것들은 맥북이 있어야한다. 맥북 없으면 셋팅 스킵하면 된다.
옛날 맥북의 경우
cd ios
sudo gem install cocoapods
입력
m1 맥북의 경우
cd ios
sudo arch -x86_64 gem install ffi
sudo arch -x86_64 gem install cocoapods
(없으면 터미널에 pod init 입력해야함)
거기 최하단에
post_install do |installer| 어쩌구부터 시작하는 부분이 있다.
그 코드 블록은 자신있게 다 지워버리고
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
'PERMISSION_CONTACTS=1',
#추가할거 더 있으면 이 자리에
]
end
end
end
이걸로 교체하면 됨.
https://pub.dev/packages/permission_handler
다른 권한들 예시
'PERMISSION_CAMERA=1',
이렇게 쓰면 카메라 권한
<key>NSContactsUsageDescription</key>
<string>님 폰의 연락처 권한이 필요합니다 제발 주셈</string>
이런 코드를 적절해보이는 곳에 자신감있게 추가된다고 한다.
권한달라고 팝업띄울 때 안내문 넣는 부분
그럼 이제 이런 식으로 뜬다고 한다.
다른 권한도 요청하고 있으면 Info.plist 파일에 다른 권한도 추가해야함.
getPermission() async {
//(주의) Android 11버전 이상과 iOS에서는 유저가 한 두번 이상 거절하면 다시는 팝업 띄울 수 없습니다.
var status = await Permission.contacts.status;
if (status.isGranted) {//연락처 권한 줬는지 여부
print('허락됨');
} else if (status.isDenied) {
print('거절됨');
Permission.contacts.request();//허락해달라고 팝업띄우는 코드
}
//하지만 아이폰의 경우 OS가 금지하는 경우도 있고 (status.isRestricted)
안드로이드의 경우 아예 앱 설정에서 꺼놓은 경우 (status.isPermanentlyDenied)
그것도 체크하고 싶으면
if (status.isPermanentlyDenied) {
openAppSettings();
}
}
7.허락or거절후 print로 확인하기
*한번 허락하니 그뒤로는 창이 나오질않음
pubspec.yaml에 contacts_service: ^0.6.3추가
import 'package:contacts_service/contacts_service.dart';
///모든 연락처 가져오기
var contacts = await ContactsService.getContacts();
///썸네일제외한 연락처 가져오기
var contacts = await ContactsService.getContacts(withThumbnails: false);
///첫연락처의 이름 출력
print(contacts[0].givenName);
프린트를 확인해 보기위해 주소록에 추가하고 이벤트를 실행해보자
이제 프린트로 저 이름이 나와야 한다
정말 이름만 나오네.
성도 받고싶으면 .familyName으로 확인할수있다.
Future addOne(String newValue) async {
///새 연락처 추가하기
Contact newPerson=Contact();
newPerson.givenName =newValue;
await ContactsService.addContact(newPerson);
setState(() {
personList.add(newPerson);
});
}
minkey를 추가했다.
결과 ->