// MainActivity.java 의 onCreate() method

@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 {
        Toast.makeText(this, "SMS 수신 권한 없음.", Toast.LENGTH_LONG).show();
        
        if(ActivityCompat.shouldShowRequestPermisssionRationale(this, Manifest.permission.RECEIVE_SMS)) {
            Toast.makeText(this, "SMS 권한 설명 필요함.", Toast.LENGTH_LONG).show();
        }
        else {
            // 시스템이 대화상자를 띄워서 사용자에게 권한요청을 한다.
            ActivityCompat.requestPermission(this, new String[] {Manifest.permission.RECEIVE_SMS}, 1);
            // 위 코드의 결과가 Toast메시지로써 보여질 수 있도록 콜백함수를 사용한다(onRequestPermissionsResult() override)
        }
    }
    
    // override method 통해서 직접 오버라이딩 해준다.
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case 1:
                if(grantResults.length > 0) {
                    if(grantResult[0] == PackageManager.PERMISSION_GRANTED)
                    	Toast.makeText(this, "SMS 수신권한을 사용자가 승인함", Toast.LENGTH_LONG).show();
                    else if(grantResult[0] == PackageManager.PERMISSION_DENIED)
                    	Toast.makeText(this, "SMS 수신권한을 사용자가 거부함", Toast.LENGTH_LONG).show();
                    else
                    	Toast.makeText(this, "SMS 수신권한을 부여받지 못함", Toast.LENGTH_LONG).show();
                }
        }
    }
}

위의 코드를 통하여, 어플 실행 시 사용자가 시스템으로부터 권한사용을 요청받는다.

 

targetSdk가 25, 26 이더라도 문제없이 실행되는 것을 확인할 수 있다.

+ Recent posts