안녕하세요. 안드로이드스튜디오를 공부하고 있는 학생입니다.
현재 블로그 강의를 보며 퍼미션을 설정하여 전화걸기를 구현해보고자 하였는데, 예제를 보고 따라하여도
Manifest.permission.CALL_PHONE 부분에서 빨간줄이 뜨며 오류가 발생하고 있습니다.
권한설정의 내용부분은 따로 자바를 만들어서 관리하고 있습니다.
CALL_PHONE 부분이 왜 오류가 뜨는 것일까요?
매니페스트에는 아래 퍼미션도 설정하였습니다.
<uses-permission android:name="android.permission.CALL_PHONE" />
void contacts_listview_click() {
contacts_listview.setOnItemClickListener(
new ListView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
String Number1 = contactList.get(position).get("Number1");
AlertDialog.Builder d = new AlertDialog.Builder(User_contacts.this);
d.setTitle("종료");
d.setMessage("전화를 거시겠습니까?");
d.setPositiveButton("예", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String Number1 = contactList.get(position).get("Number1");
// Intent intent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:" + Number1));
// Intent intent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:" + Number1));
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// startActivity(intent);
int result = new PermissionRequester.Builder(User_contacts.this)
.setTitle("권한 요청")
.setMessage("권한을 요청합니다.")
.setPositiveButtonName("네")
.setNegativeButtonName("아니요.")
.create()
.request(Manifest.permission.CALL_PHONE, 1000, new PermissionRequester.OnClickDenyButtonListener() {
@Override
public void onClick(Activity activity) {
Log.d("RESULT", "취소함.");
}
});
if (result == PermissionRequester.ALREADY_GRANTED) {
Log.d("RESULT", "권한이 이미 존재함.");
if (ActivityCompat.checkSelfPermission(User_contacts.this,
Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:010-1111-1111"));
startActivity(intent);
}
} else if (result == PermissionRequester.NOT_SUPPORT_VERSION)
Log.d("RESULT", "마쉬멜로우 이상 버젼 아님.");
else if (result == PermissionRequester.REQUEST_PERMISSION)
Log.d("RESULT", "요청함. 응답을 기다림.");
}
});
d.setNegativeButton("아니요", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
}
});
d.show();
}
});
}
/**
* 신규로 권한을 요청해 그 응답이 돌아왔을 경우 실행됨.
* @param requestCode : 권한 요청시 전송했던 코드.
* @param permissions : 요청한 권한
* @param grantResults : 해당 권한에 대한 결과
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if ( requestCode == 1000 ) {
if ( grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED ) {
/*
* 권한 획득 완료
* 해야 할 일을 수행한다.
*/
Log.d("RESULT", "권한 획득 완료");
if (ActivityCompat.checkSelfPermission(User_contacts.this,
Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:010-1111-1111"));
startActivity(intent);
}
}
else {
/*
* 권한 획득 실패
* 대안을 찾거나 기능의 수행을 중지한다.
*/
Log.d("RESULT", "권한 획득 실패");
}
}
}
}