마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

전화걸기 퍼미션 설정 질문입니다

0 추천

안녕하세요. 안드로이드스튜디오를 공부하고 있는 학생입니다.

현재 블로그 강의를 보며 퍼미션을 설정하여 전화걸기를 구현해보고자 하였는데, 예제를 보고 따라하여도 

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", "권한 획득 실패");
            }
        }
    }
}
익명사용자 님이 2017년 5월 26일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...