업그레이드 설치 APK에 FileUriExposedException이 나타나는 해결 방법

2789 단어 Android
안드로이드 8.0의 휴대전화에서 실행할 때 FileUriException이 나타나 다음과 같은 자료를 보았다.
https://www.cnblogs.com/baiqiantao/p/9548146.html
https://www.cnblogs.com/yongdaimi/p/6067319.html
제이가 말한 것은 모두 비교적 상세하다.자신의 항목에서도 문장에서 말한 대로 수정하여 정상적으로 운행한다.
우선 매니페스트에서.xml 파일에 추가

    

res에서 새 폴더 xml, 파일 파일 추가 filepaths


    
    
    
    
    
    

APK 설치 코드에서 다음과 같이 수정합니다.
public void installUpgradePackage(Uri packageFile) {
        Intent update = new Intent(Intent.ACTION_VIEW);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            update.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            Uri contentUri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileprovider", new File(packageFile.getPath()));
            update.setDataAndType(contentUri, "application/vnd.android.package-archive");
        } else {
            update.setDataAndType(packageFile, "application/vnd.android.package-archive");
            update.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        }
        startActivity(update);
    }

이상의 순서에 따라 진행하면 문제를 해결할 수 있다.처음에는 디버깅 중에 자신에게 구덩이를 팠는데,
나는 Uri content Uri = File Provider를getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileprovider", new File(packageFile.getPath()));중packageFile.getPath () 는 패키지파일로 작성되었습니다.toString,
packageFile.toString의 값은 다음과 같습니다.file:///storage/emulated/0/QZJ/QiZhongClient.apk
그리고 잘못 보고했어:Caused by:java.lang.IllegalArgumentException: Failed to find configured root that contains/file:/storage/emulated/0/QZJ/QiZhongClient.apk at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:711)
실제로 가져올 매개 변수는 패키지파일입니다.getPath():/storage/emulated/0/QZJ/QiZhongClient.apk.
생성된 Uri contentUri의 값은 다음과 같습니다.content://qizhong.client.smart.fileprovider/external/QZJ/QiZhongClient.apk,         qizhong.client.smart 이 APP의 패키지 이름입니다.       

좋은 웹페이지 즐겨찾기