0

안녕하세요, 저는 캐시 디렉토리에 OTA 파일을 다운로드하려고합니다. 이 코드를 호출하고 때캐시 폴더에 파일 다운로드

try{ otaFile = new File(Environment.getDownloadCacheDirectory().getAbsolutePath() + File.separator + "update_unsigned" + ".zip"); 

        Uri uri = Uri.parse(data.getFileUrl()); 

        DownloadManager.Request request = new DownloadManager.Request(uri); 
        request.setTitle(data.getVersionUpdate()). 
          setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
        request.setDestinationUri(Uri.fromFile(otaFile)); 


        downloadManager = (DownloadManager) context.getSystemService(DOWNLOAD_SERVICE); 

        downloadId = downloadManager.enqueue(request); 

        emitter.onSuccess("saving to " + otaFile + " id - " + downloadId); 
       } catch (Exception e) { 
        emitter.onError(new Throwable(e.getMessage())); 
       } 

나는 예외에 직면

/chche/update_unsigned.zip 지원되지 않는 경로를 내 애플 다음과 같은 권한이 있습니다

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />/ 
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED" /> 
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" /> 

나는 나의 AP를 실행하고를 시스템 앱.

또한 다운로드 관리자가 setDestinationToSystemCache() 메소드를 숨겼습니다. 그러나이를 리플렉션으로 가져 오려고 할 때 찾을 수 없습니다.

Class cls; 
        cls = Class.forName("android.app.DownloadManager"); 

        Method m; 

        m = cls.getMethod("setDestinationToSystemCache", new Class[]{}); 
        m.setAccessible(true); 
        m.invoke(null); 

그것은 단지 하나의 폴더가있는 한, 캐시 폴더에 파일을 저장하는 방법을 찾아 내 도와주세요 디바이스 제조에 허용하는.

답변

1

request.setDestinationToSystemCache();을 사용하여/cache에 파일을 저장할 수 있습니다.

request.setDestinationUri(Uri.fromFile(otaFile));은/cache와 같은 내부 디렉토리 경로를 설정할 수 없습니다. 메서드 정의에 따르면 은 다운로드 한 파일의 로컬 대상을 설정합니다. 외부 저장소의 경로에 대한 파일 URI는 이어야하며 호출 응용 프로그램에는 WRITE_EXTERNAL_STORAGE 권한이 있어야합니다.