2014-10-22 5 views
0

음악 폴더에 내 휴대 전화에 저장된 음악 파일 (SD 카드 없음)을 삭제하고 싶습니다. 나는 파일 경로가 있고 File.exists()는 진실했다. 다음으로 File.delete()도 사실이지만 파일은 그대로 유지됩니다. 그러나! "삭제"후에 더 이상이 파일을 재생할 수 없으며 이름을 편집 할 수도없고 복사 할 수도 없습니다. 하지만 수동으로 삭제할 수 있습니다.Android에서 파일을 삭제할 수 없습니다.

나는 android.permission.WRITE_EXTERNAL_STORAGE을 설정했습니다. OS 4.4.4 GPE

내 실수는 어디에서 확인할 수 있습니까? 어떤 제안이라도 고마워.

File file = new File(Path); 
    if (file.exists()){ 
     file.setWritable(true, false); 
     return file.delete(); 
    } 
+0

"나는 더 이상이 파일을 편집 이름을 재생할 수 있으며이를 복사 할 수 없습니다"- 무엇을 사용하고 계십니까? "하지만 수동으로 삭제할 수 있습니다"- 무엇을 사용합니까? – CommonsWare

+0

Windows 파일 탐색기를 사용하는 @CommonsWare) –

+0

http://stackoverflow.com/a/20780472/755804 – 18446744073709551615

답변

0

그래서, 작동하는 것 같다 내 최종 솔루션은 다음과 같습니다

public Boolean deleteTrack(String key){ 
    MusicTrack track = getAlbum(0).getTrackByKey(key); 
    if (track == null) return false; 

    File file = new File(track.getData().Path); 
    if (file.exists()){ 
     file.setWritable(true, false); 
     String where = MediaStore.Audio.Media.DATA +"=\""+ track.getData().Path +"\""; 
     if (context.getContentResolver().delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, where, null) == 1){ 
      if (file.exists()){ 
       Boolean d = file.delete(); 
       context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file))); 
       return d; 
      } 
      return true; 
     } 
    } 
    return false; 
} 
+0

여기에서 핵심적인 내용을 설명 할 수 있습니까? track.getData(). 경로? – Erum

+0

@ErumHannan 파일 경로입니다. –

1

Windows에서 외부 저장소를 직접보고 있지 않습니다. Android 기기의 MTP (Media Transfer Protocol) 서버에서 제공하는 데이터를보고 있습니다. 이는 실제 파일 시스템이 아니라 MediaStore 색인으로 작업합니다.

파일을 삭제하는 등 외부 저장소를 변경하는 경우 MediaStore을 업데이트해야합니다. 수갑을 놓은 채, 삭제 된 파일을 포함하는 디렉토리를 검사하기 위해 MediaScannerConnection and scanFile()을 사용하는 것을 고려해 볼 수는 있지만 삭제 된 파일을 어떻게 처리하는지 정확히 기억하지 못합니다.

+0

고마워, 나는 context.getContentResolver(). delete()를 사용했다. 그런 다음'StatFs'를 사용하여 여유 공간 값을 얻으려고 시도했지만 변경되지 않았습니다. 그대로 유지하십시오. 업데이트하는 방법을 알고 있습니까? –

+0

@ konopko : 실제로 파일을 삭제할 때 디스크 공간이 증가 할 것으로 예상됩니다. 나는 당신이'ContentResolver'에 무엇을 사용했는지 알지 못하지만 파일이 아닌'MediaStore' 항목을 삭제했을 수도 있습니다. 그렇다면 디스크 공간을 복구하지 못할뿐만 아니라 외부 저장 장치를 주기적으로 검사 할 때 파일이'MediaStore'에 백업으로 표시됩니다. – CommonsWare

관련 문제