Android8.0, 알 수 없는 소스 설치 허용

최근 업무 중에 많은 문제에 부딪혔습니다.android8.특히 0+ 문제가 많습니다.계속 기록하려고 했지만 실행하지 않았다.이것은 나의 첫 번째 문장이다.먼저 선배님들께 감사드리고 많은 문제를 해결해 주셔서 감사합니다.이 문장은android8에 관한 기록을 가지고 있다.0은(는) 알 수 없는 소스를 설치할 수 있습니다.
알 수 없는 출처를 설치할 수 있는 코드가 많기 때문에 뒤에도 붙일 수 있습니다. 여기서 강조하고자 하는 것은 바로 당신의 targetSdkVersion이 반드시 26보다 커야 한다는 것입니다. 피의 교훈이 있습니다. 왜냐하면 이전에 targetSdkVersion을 25로 설정했기 때문입니다. 결과적으로 아래의 haveInstallPermission은 시종일관false입니다. 울어 죽었습니다. 오전 내내 나를 괴롭혔습니다.알 수 없는 원본을 설치하는 것을 허용했지만, 아래의 have Install Permission은 항상false입니다.나중에 targetSdkVersion이 27로 수정되어 모든 것이 정상으로 돌아왔습니다.
//                 
boolean haveInstallPermission = getPackageManager().canRequestPackageInstalls();

다음은 위치 원본을 열 수 있는 코드를 완성합니다.
/**
 *   android8.0,             。      sdk    26  true,                 
 */
private boolean bAllowunKnownSources() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        boolean haveInstallPermission;
        //                 
        haveInstallPermission = getPackageManager().canRequestPackageInstalls();

        if (!haveInstallPermission) {
            LogTool.i("WebViewActivity.bAllowunKnownSources", "         ");
            //          
            showAlert(this, "    ", "           ,          ,          ", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                        //     API>=26    
                        toInstallPermissionSettingIntent();
                    }
                }
            });

        }
        return haveInstallPermission;
    } else {
        return true;
    }

}
/**
 *           
 *                   
 */
@RequiresApi(api = Build.VERSION_CODES.O)
private void toInstallPermissionSettingIntent() {
    LogTool.i("requestRuntimePermission.onGranted" , 3+"" );
    Uri packageURI = Uri.parse("package:"+getPackageName());
    Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES , packageURI);
    try {
        startActivityForResult(intent, ALLOW_UNKNOWN_SOURCES);
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }

}
/**
 * alert        
 * @param context      
 * @param title       
 * @param message     
 * @param listener     
 */
public static void showAlert(Context context, String title, String message, DialogInterface.OnClickListener listener){
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle(title);
    builder.setMessage(message);
    builder.setPositiveButton("  ", listener);
    builder.setCancelable(false);
    try {
        builder.setIcon(R.drawable.pic_small_warning);
    }catch (Exception e){
        e.printStackTrace();
    }
    AlertDialog dialog = builder.create();
    dialog.show();
}

좋은 웹페이지 즐겨찾기