728x90

안드로이드 버전이 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();
    }
}
 


블로그 이미지

Link2Me

,