[Android] 브로드캐스트 수신자(=브로드캐스트 리시버) - (2)사용법(데이터 보내고),(데이터 받고),(데이터 뽑고),(화면에 뿌려주고)

 

이 과정 후, 추가 한거,

근데 앞에 과정 필요 없음,, (이 포스터는, 그냥 위험 권한만 어떻게 처리해서 잘 사용하는 방법인지 정리한거임)

 

 

 

 

 

위험 권한 부여하는 방법을 해볼거다.

 

"위험 권한" 이라는 것이 "마시멜로 23"버전 이후부터 생겼음.

(사용자가 앱을 실행 했을 때, "어떤 권한을 허용해 줄까요?"라는 메시지를 강제로 띄워주도록 바뀜!!) - "마시멜로 23"버전 부터 바뀜

이젠 대화상자를 띄워주어야한다.

띄워줄려면 대화상자 띄워주는 방법을 알아야한다.

 

왜냐하면 버전22 전 까지는 그냥 자동으로 해주니깐 안해본것이다....

그래서 이젠 

"마시멜로 버전23" 이후 버전을 앞으로 이용해야 하니깐

해볼 것이다,

 

 

- 참고 -

[Android] 위험 권한 및 권한 그룹

 

 

 

 

 

1.

일딴, 위험 권한을 부여 할려고 하는데,

권한이 이미 부여된 경우가 있을 수가 있어요...

이렇게 확인 할 수 있음.

 

 

일딴 권한이 있는지 없는지만 체크함.

 

 

 

 

그러면 권한이 없는 경우에 권한을 주겠다라고 코드를 짤거다 (밑에코드)

(앱을 실행 했을 때, 권한이 없으면 한번 대화상자 띄워주고, 권한을 주면, 그 다음부터는 앱이 그 권한을 계속 쓸 수가 있다.)

 

 

 

 

 

 

이제 대화상자를 띄워서 시스템이 정상적으로 이 권한이 부여가 "됬다, 아니다"를 받으면,

우리쪽으로 알려 주어야 되겠죠?!!?!?!!!!

그래서 콜백 함수(onRequestPermissionsResult())를 사용한다.    -   (오버라이드)

 

 

 

 

이렇게 하고 돌리면

결과가 "SMS 수신 권한 주어져 있음." 이라고 뜨는데

적용하고 다시 실행하면

똑같음...

 

 

 

다시 실행해도

"SMS 수신 권한이 주어져 있음"  이라고 뜨면,,,,음...

 

이렇게 해주면 됨

이렇게 뜨는데,,,

 

 

 

 

 

 

 

그냥 앱을 삭제하고 다시 깔아서 실행되면 이렇게 됨.

(앱을 꺼도 다시 이렇게 뜸) - 거부or 허용 선택 할때까지 이렇게 뜸.

"허용" 클릭하면 SMS수신이 가능해짐.

 

 

 

 

 

근데,  (밑에 코드)

그냥 나중에 코딩 할때 그냥 주석처리하던지, 빼버리던지해서

권한 안되어 있으면,

걍 바로 권한창 뜨게 해버리는게 낳을거 같음.

 

 

 

나중에 위험권한 코드 사용시,

이런 방법으로 처리를 해주면 된다.

 

 

 

 

 

- 그냥 한번 더 설명 -

사용자가 중간중간 위험권한을 부여하지 않게 하는 형태로(바로 자동으로 부여하고 싶으면) 

targetSdkVersion을 22로 맞쳐주면 된다.

근데,

중간중간 위험권한 부여하고 싶으면 23이상으로 버전 맞쳐주면됨.

 

 

 

 

 

 

2. 사용 코드

public class MainActivity extends AppCompatActivity {
    
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       // 권한이 이미 부여된 경우가 있을 수가 있어요.. (권한 확인하는 코드)
        int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS); 
        if(permissionCheck == PackageManager.PERMISSION_GRANTED) {  
            Toast.makeText(this,"SMS 수신 권한 주어져 있음",Toast.LENGTH_LONG).show();
        } else{
        //else if(permissionCheck == PackageManager.PERMISSION_DENIED){   
            Toast.makeText(this,"SMS 수신 권한 없음.",Toast.LENGTH_LONG).show();
        }
    }


    // 여기서 권한이 부여가 됬는지, 안됬는지 확인을 여기서 할 수가 있다.
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case 22:
                if(grantResults.length > 0){

                    if(grantResults[0] == PackageManager.PERMISSION_GRANTED){   //PERMISSION_GRANTED 사용자가 수락을 할 경우
                        Toast.makeText(this,"SMS 수신 권한을 사용자가 승인함.",Toast.LENGTH_LONG).show();
                    }else if(grantResults[0] == PackageManager.PERMISSION_DENIED){  // 사용자가 거부할 경우
                        Toast.makeText(this,"SMS 수신 권한을 사용자가 거부함.",Toast.LENGTH_LONG).show();
                    }
                }else {
                    Toast.makeText(this,"SMS 수신 권한을 부여받지 못함.",Toast.LENGTH_LONG).show();
                }
        }
    }
}