2016-01-15 127 views
10

我試圖通過我的應用程序刪除音樂文件,但無法實現。 Ive檢查與無法刪除文件與文件類

boolean exists = temp.exists(); 
boolean isFile = temp.isFile(); 

如果有真實和是的,他們是。這些方法回報我的真實。 但是,當我來到了刪除方法:

boolean deleted = temp.delete(); 

它返回我假,文件沒有被清除。沒有異常拋出只是一個虛假的回報給我刪除的變量。

林還利用這些沒有任何權限:

<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
<uses-permission android:name="android.permission.ACTION_HEADSET_PLUG"/> 

有人得到了一個解決方案的想法? (或其他類可以使用嗎?)

編輯: 那是我的全部代碼

File temp = new File(str_path); 

boolean exists = temp.exists(); 
boolean isFile = temp.isFile(); 

if (exists)) { 
    boolean deleted = temp.delete(); 
    if (deleted) { 
     Toast.makeText(context, "Successful deleted " + Title_Artist, Toast.LENGTH_SHORT).show(); 
      } else { 
       Toast.makeText(context, "Not able to delete file " + Title_Artist, Toast.LENGTH_SHORT).show(); 
      } 
     } 

(我查而調試運行,如果對象有自己的路徑,它和它有它)

+1

什麼,確切地說,'temp'指向?什麼是路徑?你是如何創建'File'對象的? – CommonsWare

+0

請張貼更多的代碼 - – Zain

+0

我更新了我的帖子。你現在可以在編輯:部分 –

回答

0

由於您檢查文件是否存在,因此您只能有一個原因導致您無法刪除該文件:您無權執行此操作。

應用程序無法刪除系統文件或其他應用程序的文件。

+0

但其他音樂播放器應用程序如何做到這一點?我需要的所有特權我用在我的清單權利? –

+0

你能給我一個你想要刪除的例子嗎?只是幾個文件的路徑。 –

+0

/storage/extSdCard/Musik/neverlie_look.mp3 –

2

評論的路徑看起來像文件位於可移動的SD卡上。您需要Android 4.4+的特殊權限才能管理或刪除SD卡上的文件。您將需要使用DocumentFile#delete()

如需幫助使用DocumentFile請參閱以下的StackOverflow後可移動SD卡上訪問文件:

How to use the new SD card access API presented for Android 5.0 (Lollipop)?


也有可能不使用DocumentFile由開發商作爲解釋工作黑客攻擊FX文件管理器在這裏:http://forum.xda-developers.com/showpost.php?p=52151865

+0

黑客中的「ContentUriUtil」是什麼? –

0

假設你的文件路徑是

Environment.getExternalStorageDirectory().getPath() 
         + "/Music" 
         + "/" 
         + "song.mp3" 

刪除它像這樣

File dir = new File(Environment.getExternalStorageDirectory() 
         .getPath() 
         + "/Music"); 

if (dir.isDirectory()) {new File(dir, song.mp3).delete();} 

,如果你想刪除音樂文件夾中的所有文件做到這一點

if (dir.isDirectory()) { 
        String[] children = dir.list(); 
        for (int i = 0; i < children.length; i++) { 
         new File(dir, children[i]).delete(); 
        } 
       } 
3

刪除文件的音樂,你必須做兩件任務:

  1. 刪除存儲中的文件。從MediaStore

    public static boolean delete(File path) { 
        boolean result = true; 
        if (path.exists()) { 
         if (path.isDirectory()) { 
          for (File child : path.listFiles()) { 
           result &= delete(child); 
          } 
          result &= path.delete(); // Delete empty directory. 
         } 
         if (path.isFile()) { 
         result &= path.delete(); 
         } 
         if (!result) { 
          Log.e("Delete", "Delete failed;"); 
         } 
         return result; 
        } else { 
         Log.e("Delete", "File does not exist."); 
         return false; 
        } 
    } 
    
  2. 刪除文件:

    public static void deleteFileFromMediaStore(final ContentResolver contentResolver, final File file) { 
        int sdk = android.os.Build.VERSION.SDK_INT; 
        if (sdk >= android.os.Build.VERSION_CODES.HONEYCOMB) { 
         String canonicalPath; 
         try { 
          canonicalPath = file.getCanonicalPath(); 
         } catch (IOException e) { 
          canonicalPath = file.getAbsolutePath(); 
         } 
         final Uri uri = MediaStore.Files.getContentUri("external"); 
         final int result = contentResolver.delete(uri, 
           MediaStore.Files.FileColumns.DATA + "=?", new String[]{canonicalPath}); 
         if (result == 0) { 
          final String absolutePath = file.getAbsolutePath(); 
          if (!absolutePath.equals(canonicalPath)) { 
          contentResolver.delete(uri, 
            MediaStore.Files.FileColumns.DATA + "=?", new String[]{absolutePath}); 
          } 
         } 
        } 
    } 
    

可以重置/重新掃描MediaStore,而不是上面做一些代碼。

注意:如果你從SD卡中刪除和Android 4.4 +

更改爲Android 4.4+:應用程序不允許寫(刪除,修改 ...)到外部存儲設備除了他們的包特定的目錄。

+0

但我不明白的問題是其他應用程序如何做到這一點?我試過了,我不能從外部刪除一個特定的文件,但應用程序Shuffler可以刪除它。 –