위험 권한
마시멜로 버전부터는 권한을 일반 권한(Normal Permission)과 위험 권한(Dangerous Permission)으로 나누었습니다.
그 이전에는 앱을 설치하는 시점에서만 권한을 부여할 것인지 물어보았는데 사용자가 아무런 생각 없이 앱을 설치하는 경우가 많아 앱에서 아무리 많은 권한을 요구해도 그냥 승인되는 경우가 많았기 때문입니다.
위험 권한은 앱이 실행된 후에 사용자에게 권한 허용을 요청해야 합니다.
예를 들어, 인터넷을 사용할 때 부여하는 INTERNET 권한은 일반 권한이므로 앱을 설치할 때만 승인하면 되지만 위험 권한으로 분류되는 RECEIVE_SMS의 경우에는 설치 시에 부여한 권한 외에도 실행 시에 사용자에게 권한을 부여할 것인지 물어보아야 합니다.
만약 사용자가 권한을 부여하지 않으면 해당 기능은 동작하지 않습니다.
즉 앱을 설치했다고 하더라도 권한에 따라 실행할 수 있는 기능에 제약이 생기는 것이죠.
위험 권한의 종류
위험 권한으로 분류된 주요 권한들을 보면 대부분 개인정보가 담겨있는 정보에 접근하거나 개인정보를 만들어낼 수 있는 단말의 주요 장치에 접근하는 경우에 부여되는 권한이라는 것을 알 수 있습니다.
위치, 카메라, 마이크, 연락처, 전화, 문자, 일정, 센서로 대표되는 위험 권한은 다음과 같은 세부 권한으로 나누어집니다.
위험 권한 부여방법
build.gradle 파일의 targetSdkVersion 값을 23 미만으로 설정하면 API 23 버전 이후의 플랫폼에서 검증된 앱이 아니라고 인식하여 위험 권한도 자동으로 부여됩니다.
하지만 대부분의 앱은 직접 코드에서 앱 실행 시에 위험 권한을 부여하는 것이 필요합니다.
먼저 매니페스트 파일(AndroidManifest.xml)에 권한을 추가한 후 코드에서 해당 위험 권한을 부여하도록 만들어줍니다.
필요한 시점에 아래와 같은 코드를 적용하면 사용자가 볼 수 있도록 새로운 권한 부여 요청 대화상자가 뜨게 됩니다.
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 {
Toast.makeText(this, "SMS 수신 권한 없음.", Toast.LENGTH_LONG).show();
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECEIVE_SMS)) {
Toast.makeText(this, "SMS 권한 설명 필요함.", Toast.LENGTH_LONG).show();
} else {
ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.RECEIVE_SMS}, 1);
}
}
}
최근댓글