2017-05-08 452 views
0

我下面这段代码下载才能再次删除apk文件,然后安装它file.delete()返回true,但文件仍然存在

String destination = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/"; 
String fileName = getResources().getString(R.string.apkname) + ".apk"; 
destination += fileName; 
final Uri uri = Uri.parse("file://" + destination); 

File file = new File(destination); 
if (file.canRead()) { 
    if (file.delete()) { 
     Toast.makeText(getApplicationContext(), "File deleted", Toast.LENGTH_LONG).show(); 
    } 
} 

我发现这个文件,所以我得到file.delete(),然后我得到Toast消息,但是当我检查下载时,文件仍然存在,并且最终得到多个具有相同名称的文件,我仍然可以在没有问题的情况下使用它们,所以这就像file.delete()完全没有。

为了记录在案,我在清单WRITE_EXTERNAL_STORAGE同意;我要求它在运行时过,因为我使用sdkversion 25

有什么不对?

在此先感谢

+0

参考你有没有试图重新启动你的Android设备,如果重复的文件存在验证? –

+0

@Divya我正在使用模拟器,实际上。 –

+0

添加'try'和'exception'并检查错误是什么? –

回答

0

尝试这种解决方案我已经测试...

 String destination = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/"; 
     String fileName = getResources().getString(R.string.apkname) + ".apk"; 
     destination += fileName; 

     try { 
      File file = new File(destination); 
      if (file.canRead()) { 

       boolean mDeleleFile = file.delete(); 
       context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(destination)))); 
       if (mDeleleFile) { 
        Toast.makeText(getApplicationContext(), "File deleted", Toast.LENGTH_LONG).show(); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

我从How to delete a file from SD card?

+0

该文件在那里,但我仍然到达吐司消息,所以'mDeleteFile'为真 –

+0

我已经为我测试了这项工作。一旦请检查应用程序的权限去手动..通过应用程序的信息,并检查外部存储权限 – rockstar

+1

抱歉,延迟的答案。不是在运行时问足够的权限吗? 而你的解决方案适用于哪个Android版本? –

相关问题