2016-02-24 37 views
0

後,我用這個代碼共享一個zip文件(fzip):Android。刪除文件時,它已經被共享

Intent sendIntent = new Intent(); 
    sendIntent.setAction(Intent.ACTION_SEND); 
    sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(fzip)); 
    sendIntent.putExtra("myfilename", fzip.getPath()); 
    sendIntent.setType("application/zip"); 
    startActivityForResult(sendIntent, 1); 

文件共享後(複製,加入到Dropbox的,...)我要刪除原始的zip文件,因爲它不再有用。

我嘗試使用此:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // Check which request we're responding to 
    if (requestCode == 1) { 

     String myname=data.getStringExtra("myfilename"); 
     Toast.makeText(getApplicationContext(), "created file:" + myname , Toast.LENGTH_SHORT).show(); 

     } 
    } 

使我對以後得到的文件名,因爲該文件已被共享的,我可以將其刪除。

壓縮文件被複制,因爲它應該。但該應用程序崩潰。我該怎麼辦?

+0

你能告訴我們你的崩潰日誌嗎? –

+0

我選擇了一種不同的方法。在共享之後,我不會試圖刪除文件,而是會執行CommonsWare建議的內容,並在很長一段時間後(例如第二天)刪除它。所以我在代碼中做了一些更改,崩潰日誌不再可用。 T – geo

回答

0

首先,ACTION_SEND不與startActivityForResult()一起使用,因爲它不返回結果。

二,您的額外不在Intent傳入onActivityResult(),因爲那些是單獨的Intent對象。

第三,只是因爲控制返回給你並不意味着其他應用程序已完成與您的文件呢。您無法知道何時使用該文件完成了其他應用程序。我建議等待24小時,然後刪除它。

+0

你建議把計時器計算很長時間,之後刪除zip文件?我認爲,但它似乎並不「優雅」。我不能等太久,因爲用戶可能會在幾秒鐘內重新創建並重新共享該zip文件。您認爲我應該等多久以便該文件有合理的時間才能分享? zip文件通常只有幾MB – geo

+1

@geo:或者如果您希望用戶經常使用您的應用程序,只需檢查您的啓動器活動(如果文件足夠大以保證刪除)。 「我不能等待太久,因爲用戶可能會重新創建並在幾秒鐘內重新共享zip文件」 - 使用唯一的文件名。此外,將文件存儲在專用位置,可能位於'getExternalCacheDir()'的子目錄中,因此您可以輕鬆識別要刪除的候選對象。 – CommonsWare

+1

@geo:「你認爲我應該等多久以便文件有合理的時間才能分享?」 - 無法確定。對於你所知道的,另一個應用程序不會將你的文件發送到某個服務器,直到每晚的同步過程。這就是爲什麼我建議24小時的原因,因爲如果其他應用程序仍然需要它,那麼您就很好地認識到「這是其他應用程序的問題」。關於「優雅」,不幸的是,我不知道這個問題的任何優雅的解決方案。 – CommonsWare

相關問題