마시멜로 버전부터는 권한을 일반 권한(Normal Permission)과 위험 권한(Dangerous Permission)으로 나누었으며, 위험 권한의 경우에는 앱이 실행될 때 사용자에게 권한 부여할 것인지 물어보도록 변경되었다.
대표적인 위험권한은 위치, 카메라, 마이크, 연락처, 전화, 문자, 일정, 센서 등이다.
TedPermission 라이브러리를 이용하여 권한체크 하는 방법으로 간단히 이용할 수 있어 편하다.
제작자 블로그 : http://gun0912.tistory.com/
신규 스마트폰은 SDK 버전이 23 이라고 봐도 무방하다.
targetSdkVersion 23 이상으로 설정한 경우
dependencies {
implementation 'gun0912.ted:tedpermission:2.0.0'
}
추가한다.
사용 예제
import com.gun0912.tedpermission.PermissionListener; import com.gun0912.tedpermission.TedPermission;
public class MainActivity extends AppCompatActivity { Context context;
PermissionListener permissionlistener = new PermissionListener() { @Override public void onPermissionGranted() { initView(); // 권한이 승인되었을 때 실행할 함수 }
@Override public void onPermissionDenied(ArrayList<String> deniedPermissions) { Toast.makeText(MainActivity.this, "권한 허용을 하지 않으면 서비스를 이용할 수 없습니다.", Toast.LENGTH_SHORT).show(); } };
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context = this.getBaseContext();
checkPermissions(); }
private void checkPermissions() { if (Build.VERSION.SDK_INT >= 23){ // 마시멜로(안드로이드 6.0) 이상 권한 체크 TedPermission.with(context) .setPermissionListener(permissionlistener) .setRationaleMessage("이미지를 다루기 위해서는 접근 권한이 필요합니다") .setDeniedMessage("앱에서 요구하는 권한설정이 필요합니다...\n [설정] > [권한] 에서 사용으로 활성화해주세요.") .setPermissions(new String[] { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}) .check();
} else { initView(); // 권한 승인이 필요없을 때 실행할 함수 } }
private void initView() { imageView = (ImageView) findViewById(R.id.croppedImageView); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {
} }); }
} |
필요한 권한을 멀티로 지정해주면 된다.