2016-01-15 102 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可以删除它。 –