ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [안드로이드] 마시멜로 버전 이전과 이후로 퍼미션(권한) 적용하기
    안드로이드(java)/버전 관련 2018. 12. 3. 09:57

    안드로이드 개발을 할 때 주의해야 할 점은 버전별 퍼미션(권한) 관리 입니다.


    6.0 버전 (마시멜로) 부터는 권한을 사용자에게 요청해서 받도록 변경되었기 때문이죠.


    api 23 이상과 이하를 구분해서 퍼미션 관리를 해주는게 좋습니다.


    퍼미션을 적용하지 않는다면 권한이 필요한 내용들 (sms 수신, 인터넷, 네트워크, 블루투스, 전화 등)의 기능을 사용할 수 없습니다.


    그럼 어떻게 적용하지는 확인해보도록 하겠습니다.



    제가 적용한 환경은 아래와 같습니다.


    <app 수준의 build.gralde>


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    android {
        compileSdkVersion 28
        defaultConfig {
            applicationId "com.example.ez_1401.smsproject"
            minSdkVersion 23
            targetSdkVersion 28
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    cs


    <Manifest.xml>

    매니페스트에는 sms 수신 권한을 설정하기 위해서 uses-permission을 설정하였습니다.


    1
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    cs


    이렇게 넣었습니다. 



    <MainActivity.java>


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            int permissionCheck = 0;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                permissionCheck = ContextCompat.checkSelfPermission(this,Manifest.permission.RECEIVE_SMS);
                if (permissionCheck == PackageManager.PERMISSION_DENIED) {
                    // no permission
                    ActivityCompat.requestPermissions(thisnew String[]{Manifest.permission.RECEIVE_SMS},REQUEST_SMS_RECEIVE);
                } else {
                    // already have permission
                }
            } else {
                // OS version is lower than marshmallow
            }
        }
    cs


    적용은 위에처럼 onCreate 메서드 처럼 필요한 곳 안에서 적용 시켜주시면 됩니다.


    지금 적용한 권한은 sms 수신 권한 입니다.


    권한 설정을 했다면 사용자가 어떻게 반응 했는지에 따라 결과를 받는 곳도 필요합니다.


    <MainActivity.java>


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
     
            if (grantResults[0== PackageManager.PERMISSION_GRANTED){
                // if granted
            } else {
                // if denied
            }
        }
    cs


    이렇게 작성하셔서 필요한 내용을 입력해주시면 됩니다.


    여기 까지가 설정 화면이고 결과는 어떻게 나오는지 확인해보겠습니다.



    이렇게 나오게 됩니다.


    권한이 필요한 경우 이렇게만 적용하시면 바로 사용 가능하실거에요.







    댓글

Designed by Tistory.