2017-09-30 11 views
3

내 앱에는 사용자가 다운로드 할 수있는 파일이 몇 개 있습니다. 다운로드 파일은 이며 안드로이드 다운로드 관리자을 통해 다운로드 할 수 있습니다. 그러나 몇 주일이 지난 지금도 수백 명의 사용자가 앱을 제거하지 않고도 파일이 8-12 일마다 자동으로 삭제된다는 불만을 제기하고 있습니다. (동일한 것에 대해 불평하지 않으려 고 더 많은 사용자가있을 수 있습니다.)다운로드 파일은 자동으로 삭제됩니다.

이제 몇 가지 장치에서 이러한 일이 발생하는 사용자 별 이유가 많이있을 수 있습니다. 그러나 엄청난 수의 사용자를 고려할 때, 내가 잘못한 것 같았습니다.

왜 시스템/다운로드 관리자가 파일을 자동으로 삭제합니까? 특정 파일을 삭제하지 않도록 시스템 또는 다운로드 관리자에게 알릴 수있는 방법이 있습니까? 아니면 다운로드 관리자가 파일의 링크를 해제하고 문제가 해결 될 수 있기를 바라면서 다운로드 한 파일의 이름을 바꾸는 방법으로 해결해야합니까?

편집 :

여기에 내가 파일을 다운로드하는 데 사용하는 코드입니다 :

DownloadManager.Request request = new DownloadManager.Request(Uri.parse(trackLink)); 
request.setTitle(trackTitle); 
request.setDestinationInExternalPublicDir("Tracks", trackTitle + ".mp3"); 
request.setVisibleInDownloadsUi(false); 
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
manager.enqueue(request); 
+0

가이 파일을 저장 : 다음 DownloadIdleService에서 자바 독이다? 그리고 응용 프로그램에서 이러한 파일을 어떻게 사용합니까? 그리고 예, 파일을 다운로드하고 저장하는 데 사용하는 코드 세그먼트를 공유 할 수 있습니까? –

+0

@ReazMurshed 파일을 다운로드 할 때 사용하는 코드로 질문을 편집했습니다.이 파일들은 앱에서 재생할 수있는 mp3 트랙입니다. – Sagar

+0

그래서 손상된 파일을 재생하려고 할 때 "파일을 찾을 수 없음"또는 이와 비슷한 것을 표시합니까 ?? –

답변

2

나는 또한이 문제를 보았습니다. DownloadIdleService의 소스를 보면 다운로드가 UI에 표시되지 않도록 설정된 경우 7 일 후에 삭제되며 '부실함'으로 간주됩니다.

/** 
* Remove stale downloads that third-party apps probably forgot about. We 
* only consider non-visible downloads that haven't been touched in over a 
* week. 
*/ 

https://android.googlesource.com/platform/packages/providers/DownloadProvider/+/master/src/com/android/providers/downloads/DownloadIdleService.java#110

+0

이러한 삭제를 중지 할 수있는 방법이 있습니까? – Deepti

+0

최상의 방법은 임시 파일 이름을 사용하여 다운로드하고 다운로드가 완료되면 이름을 바꾸는 것입니다. – user3209486

1

그것은 그냥 대답으로 가져온 거에요에게 의견 너무 컸다.

파일이 누락되었거나 일정 기간 동안 삭제되는 이유 (조금 이상합니다)는 아직 없습니다. 그러나 나는 비슷한 것을해야만했고 이와 같은 것을 결코 경험하지 못했습니다. 그래서 나는 그 경우에 내가 한 일을 나눌 지 모르지만.

다운로드 한 파일을 외부 저장소에 보관하는 대신 응용 프로그램이 보유하고있는 내부 저장소에 보관하는 것이 좋습니다. 예를 들어, 내가 다운로드 한 파일을 저장하는 데 사용되는 파일 경로는 ... 같은 나는 그것이 바로 사용할 수 있도록 다운로드가 새 파일에 대한 미디어 스캐너를 말하고 직후에 무슨 짓을했는지 그래서

/data/data/" + "com.example.myapplication" + "/musicfiles/ 

뭔가 사용자. 그래서 AsyncTask을 사용하여 파일을 다운로드 할 때 성공적인 다운로드 후에 스캐너를 onPostExecute과 같이 실행해야했습니다.

protected void onPostExecute() { 

    if(downloadCompletedSuccessfully) { 

     MediaScannerConnection.scanFile(context, 
      new String[]{file.toString()}, null, 
      new MediaScannerConnection.OnScanCompletedListener() { 
       public void onScanCompleted(String path, Uri uri) { 
        Log.i("ExternalStorage", "Scanned " + path + ":"); 
        Log.i("ExternalStorage", "-> uri=" + uri); 
       } 
      }); 
    } 
} 

그래서 귀하의 경우에, 나는 인해 다운로드 한 파일의 가용성에 다운로드 버튼이 보이지 않는 것을 문제는 될 수 없다 생각합니다. 미디어 스캐너가 파일 시스템에서도 파일을 찾지 못하는 경우에 발생할 수 있습니다. 그래서 한 번 시도해 보는 것이 좋습니다.

깨끗한 마스터 또는 그와 같은 일부 소프트웨어가 정크 파일을 깨끗하게 정리했는지, 외부 저장소에 있는지 알 수 없습니다. 그것들을 조사하는 것도 좋습니다.

+0

Reaz 감사합니다.하지만 미디어 스캐너와 아무 관련이 없습니다. 실제로, 나는 또한 미디어 스캐너가 그것을 의도적으로 무시하는 것처럼 내 파일이 다운로드되는 .nomedia 파일을 가지고있다. 나는 청결한 주인 같이 더 청결한 apps로 볼 것이다. 분명히 그 유명한 앱 중 하나가 여기에 범인이되어야합니다. – Sagar