안드로이드 베이스액티비티
프래그먼트 등록 및 액티비티 전환 메서드.
안드로이드 퍼미션 대응
public abstract class BaseActivity extends AppCompatActivity {
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
//뒤로가기 2초 종료 유도
super.onBackPressed();
} else {
super.onBackPressed();
}
}
/**
* add 를 했을 때 액티비티에서 종료를 하면 앱이 0으로 표시된다.
*/
public void addFragment(int id, Fragment fragment) {
addFragment(id, fragment, null);
}
public void addFragment(int id, Fragment fragment, String tagName) {
getSupportFragmentManager().beginTransaction().add(id, fragment, tagName).commit();
}
/**
* 프래그먼트 전환.
* 액티비티에서 앱을 종료하면 이건 1이 된다.
*/
public void replaceFragment(int id, Fragment fragment) {
replaceFragment(id, fragment, null);
}
public void replaceFragment(int id, Fragment fragment, String backStackName) {
getSupportFragmentManager().beginTransaction().replace(id, fragment)
// 백스텍에 이름이 없거나 널이면 프래그먼트클래스 이름을 등록
.addToBackStack(backStackName).commit();
}
public void removeFragment(Fragment fragment) {
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
}
public void removeFragment(Fragment fragment, String backStackName) {
getSupportFragmentManager().beginTransaction().remove(fragment)
// 백스텍에 이름이 없거나 널이면 프래그먼트클래스 이름을 등록
.addToBackStack(backStackName).commit();
}
/**
* 액티비티 전환
*/
public void changeActivity(Context context, Class<?> activity, boolean activityFinish) {
Intent intent = new Intent(context, activity);
startActivity(intent);
if (activityFinish) {
finish();
}
}
/**
* 퍼미션 체크 인터페이스
*/
public interface PermissionCheckListener {
/**
* 퍼미션 허용이 끝나면 끝나는 시점 초기화 시작구간을 콜백으로 구현
* 어디서든 등록하고 액티비티에서 콜백으로 지정을 한다
*/
void permissionCheckFinish();
}
private PermissionCheckListener permissionCheckListener;
public PermissionCheckListener getPermissionCheckListener() {
return permissionCheckListener;
}
/**
* 제일 먼저 등록
*/
public void setPermissionCheckListener(PermissionCheckListener permissionCheckListener) {
this.permissionCheckListener = permissionCheckListener;
}
/**
* 퍼미션 권한 리퀘스트 코드
*/
private final int PERMISSION_REQUEST = 11000;
/**
* 스트링 배열로 퍼미션 체크.<p>
* true 면 퍼미션 승인 안한 것이 존재함<p>
* onRequestPermissionsResult 로 넘어감
*/
public boolean permissionCheck(String[] strings) {
boolean check = false;
// //안드로이드 마시멜로 이후 퍼미션 체크.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
for (int i = 0; i < strings.length; i++) {
if (ContextCompat.checkSelfPermission(this, strings[i]) == PackageManager.PERMISSION_DENIED) {
ActivityCompat.requestPermissions(this, strings, PERMISSION_REQUEST);
check = true;
break;
}
}
}
return check;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST) {
//LogUtil.e("권한 허용이 안된것을 확인해야한다..");
// //안드로이드 마시멜로 이후 퍼미션 체크.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] == 0) {
//LogUtil.w("권한이 승락된 것은 ??? " + permissions[i]);
if (grantResults.length == (i + 1)) {
//LogUtil.e("인터페이스로 한곳에 모아서 앱을 실행하도록 한다...");
// 앱 시작구간이라고 보면 된다
permissionCheckListener.permissionCheckFinish();
}
} else {
//LogUtil.w("권한 거절 것은 ??? " + permissions[i]);
// 거부한 이력이 있으면 true를 반환한다.
if (shouldShowRequestPermissionRationale(permissions[i])) {
//LogUtil.e("사용자가 다시 보지 않기에 체크를 하지 않고, 권한 설정을 거절한 이력이 있는 경우");
ActivityCompat.requestPermissions(this, permissions, PERMISSION_REQUEST);
break;
} else {
//LogUtil.e("사용자가 다시 보지 않기에 체크하고, 권한 설정을 거절한 이력이 있는 경우.");
new AlertDialog.Builder(this).setTitle("다시보지않기 클릭.").setMessage(permissions[i] + " 권한이 거부되었습니다 설정에서 직접 권한을 허용 해주세요.").setNeutralButton("설정", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
Toast.makeText(getApplicationContext(), "권한 설정 후 다시 실행 해주세요.", Toast.LENGTH_SHORT).show();
finish();
}
}).setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "권한 설정을 하셔야 앱을 사용할 수 있습니다.", Toast.LENGTH_SHORT).show();
finish();
}
}).setCancelable(false).create().show();
}// shouldShowRequestPermissionRationale /else
} // 권한 거절
} // for end
}//Build.VERSION.SDK_INT end
}//requestCode end
}
}
'Android > 소스' 카테고리의 다른 글
코틀린 MVP 패턴 기본 (0) | 2018.07.17 |
---|---|
디펜던시. (0) | 2018.06.04 |
안드로이드 연속클릭 방지 클래스. (0) | 2018.05.23 |
안드로이드 퍼미션 권한 관련 (0) | 2018.04.17 |
안드로이드 리스트뷰 예제 (0) | 2018.03.22 |