Android 연락처 전화번호 가 져 오기 기능 구현
1.연락처 선택
............
// Intent,
final Intent pickIntent = new Intent(Intent.ACTION_PICK,
ContactsContract.Contacts.CONTENT_URI);
mSuspectButton = (Button)v.findViewById(R.id.crime_suspect);
mSuspectButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(pickIntent, REQUEST_CONTACT);
}
});
...........
2.선택 결과 처리
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
...........
} else if (requestCode == REQUEST_CONTACT && data != null) {
// , Uri
Uri contactUri = data.getData();
String[] queryFields = new String[] {
ContactsContract.Contacts.DISPLAY_NAME,
// contactId
ContactsContract.Contacts._ID
};
Cursor c = getActivity().getContentResolver()
.query(contactUri, queryFields, null, null, null);
if (c == null) {
return;
}
try {
if (c.getCount() == 0) {
return;
}
c.moveToFirst();
//
String suspect = c.getString(0);
mCrime.setSuspect(suspect);
mSuspectButton.setText(suspect);
// contactId
mCrime.setContactId(c.getString(1));
mDialButton.setEnabled(true);
} finally {
c.close();
}
}
}
3.실행 신청 시 권한안 드 로 이 드 6.0 이후,READCONTACTS 가 실행 권한 으로 변 경 됩 니 다.
따라서 AndroidManifest.xml 에서 권한 을 설명 하 는 것 외 에(낮은 버 전 호 환)코드 에서 자발적으로 신청 해 야 합 니 다.
...............
mDialButton = (Button) v.findViewById(R.id.crime_dial);
mDialButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//SDK >= 23 , Activity.checkSelfPermission
// SDK , ,
// android.support.v4.app.Fragment checkSelfPermission
// Activity, ActivityCompat
int hasReadContactsPermission = checkSelfPermission(getContext(),
android.Manifest.permission.READ_CONTACTS);
//
// , ,
if (hasReadContactsPermission != PackageManager.PERMISSION_GRANTED) {
// ,
// “ , ” ,
// ,
// shouldShowRequestPermissionRationale
if (!shouldShowRequestPermissionRationale(android.Manifest.permission.READ_CONTACTS)) {
showMessageOKCancel("You need to allow access to Contacts",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// ,
requestPermissions(
new String[] {Manifest.permission.READ_CONTACTS},
ASK_READ_CONTACTS_PERMISSION);
}
});
return;
}
requestPermissions(new String[] {Manifest.permission.READ_CONTACTS},
ASK_READ_CONTACTS_PERMISSION);
return;
}
// ,
getPhoneNumberAndDial();
}
});
................
private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(getContext())
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}
4.처리 권한 신청 결과
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case ASK_READ_CONTACTS_PERMISSION:
// , grantResults[0]
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// ,
getPhoneNumberAndDial();
} else {
Toast.makeText(getContext(),
"READ_CONTACTS Denied",
Toast.LENGTH_SHORT)
.show();
}
return;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
이곳 에서 주의해 야 할 것 은:1)호 환 라 이브 러 리 에 있 는 Fragment 를 사용 하지 않 으 면 onRequestPermissions Result 는 이 Fragment 를 포함 하 는 Activity 에 정의 해 야 호출 을 보장 할 수 있 습 니 다.
2),사용자 가'권한 신청 을 거부 하고 알림 을 하지 않 습 니 다'와 유사 한 버튼 을 눌 렀 다 면 다시 권한 을 신청 한 결 과 는 계속 DENIED 가 될 것 입 니 다.
이 때 설정 에 있 는 응용 관리 에 들 어가 실행 권한 을 켜 야 합 니 다.
5.전화번호 조회 및 전화 걸 기
private void getPhoneNumberAndDial() {
// contactId, CommonDataKinds.Phone
Cursor c = getActivity().getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[] {mCrime.getContactId()},
null);
if (c == null) {
return;
}
try {
if (c.getCount() != 0) {
c.moveToFirst();
// Phone Number indexId
int index = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
// phone Number
String number = c.getString(index);
Uri realNumber = Uri.parse("tel: " + number);
//ACTION_DIAL , ACTION_CALL
Intent i = new Intent(Intent.ACTION_DIAL);
i.setData(realNumber);
startActivity(i);
} else {
Toast.makeText(getContext(), "choose contact again", Toast.LENGTH_LONG).show();
}
} finally {
c.close();
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.