안드로이드 버전이 6.0 이상인 경우 출처를 알 수 없는 앱인 경우 설치 허용 체크가 해제된 상태다.
이 경우 설정을 체크하는 화면으로 이동하는 코드를 테스트 하고 적어둔다.
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
implementation 'gun0912.ted:tedpermission:2.0.0'
출처를 알 수 없는 앱 설정 코드
if(Build.VERSION.SDK_INT >= 26){ // 출처를 알 수 없는 앱 설정 화면 띄우기 PackageManager pm = LoginActivity.this.getPackageManager(); // 현재 설치하는 앱 boolean isTrue = pm.canRequestPackageInstalls(); if (!pm.canRequestPackageInstalls()){ // 신뢰할 수 있는 앱 체크로 선택되어 있지 않다면.... startActivity(new Intent(android.provider.Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, Uri.parse("package:" + getPackageName()))); } }
|
private void NonSecretApp_Setting() { if(Build.VERSION.SDK_INT >= 26) { // 출처를 알 수 없는 앱 설정 화면 띄우기 PackageManager pm = getPackageManager(); Log.e("Package Name",pm.getInstalledPackages(0).get(0).packageName); Log.e("Package Name",getPackageName()); if (!pm.canRequestPackageInstalls()) { AlertDialog.Builder b = new AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Light_Dialog); b.setTitle("알림"); b.setMessage("보안을 위해 스마트폰 환경설정의 '앱 설치 허용'을 설정해 주시기 바랍니다.설정화면으로 이동하시겠습니까?"); b.setCancelable(false); b.setPositiveButton("설정하기", (dialog, which) -> { Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES); intent.setData(Uri.parse("package:" + getPackageName())); startActivity(intent); });
b.setNegativeButton("건너띄기", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) {
} }); b.show(); } } }
|
한번 신뢰 설정을 하면 두번다시 물어보지는 않으므로 안심하고 사용하면 된다.
PermissionListener permissionlistener = new PermissionListener() { @Override public void onPermissionGranted() { initView(); }
@Override public void onPermissionDenied(ArrayList<String> deniedPermissions) { Toast.makeText(LoginActivity.this, "권한 허용을 하지 않으면 서비스를 이용할 수 없습니다.", Toast.LENGTH_SHORT).show(); } };
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); context = LoginActivity.this; checkPermissions(); }
private void checkPermissions() {
if(Build.VERSION.SDK_INT >= 26){ // 출처를 알 수 없는 앱 설정 화면 띄우기 PackageManager pm = context.getPackageManager(); Log.e("Package Name",getPackageName()); boolean isTrue = pm.canRequestPackageInstalls(); if (!pm.canRequestPackageInstalls()){ startActivity(new Intent(android.provider.Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, Uri.parse("package:" + getPackageName()))); } } if (Build.VERSION.SDK_INT >= 23) { // 마시멜로(안드로이드 6.0) 이상 권한 체크 TedPermission.with(context) .setPermissionListener(permissionlistener) .setRationaleMessage("앱을 이용하기 위해서는 접근 권한이 필요합니다") .setDeniedMessage("앱에서 요구하는 권한설정이 필요합니다...\n [설정] > [권한] 에서 사용으로 활성화해주세요.") .setPermissions(new String[]{ android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_CALL_LOG, // 안드로이드 9.0 에서는 이것도 추가하라네 android.Manifest.permission.CALL_PHONE, // 전화걸기 및 관리 android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION }) .check();
} else { initView(); } }
|