2014-09-22 148 views
0

我試圖用此代碼刪除我的視頻,但在某些設備上,它們顯示爲無法在圖庫中播放的損壞視頻。如何從圖庫中刪除視頻?

File videoFile = new File(filepath); 
videoFile.delete(); 

如何正確刪除它們?

回答

0

Java代碼似乎是正確的,你有沒有在你的清單中聲明WRITE_EXTERNAL_STORAGE? 如果不是,請在<application>標記外面添加<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

+0

該文件實際上被刪除了,所以我已經在manifest文件中設置了權限。 – user2737037 2014-09-23 05:35:27

1

圖庫正在顯示媒體庫數據。要從圖庫中完全刪除文件,您必須刪除視頻的mediastore數據庫行。

  • 在代碼中從媒體存儲中刪除記錄。

    // delete the mediastore entry; 
    getContext().getContentResolver().delete(mediaStoreUri, null, null); 
    

現在,所有你需要的是mediaStoreUri你可以從文件路徑得到它。

//found this on github 

https://gist.github.com/jdeloach/3172742

問題與上面的鏈接我寧願他們使用的ContentUris.withAppendedId靜態方法來得到URI,而是他們只是添加斜線和字符串出來

Uri mediaStoreUri = ContentUris.withAppendedId(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
          ImageId); 
0

基礎的對danny117的回答我找到了刪除視頻庫的解決方案:

/** 
* Returns the Uri which can be used to delete/work with images in the photo gallery. 
* @param filePath Path to IMAGE on SD card 
* @return Uri in the format of... content://media/external/images/media/[NUMBER] 
*/ 
private Uri getUriFromPath(String filePath) { 
    long videoId; 
    Uri videoUri = MediaStore.Video.Media.getContentUri("external"); 

    String[] projection = {MediaStore.Video.Media._ID}; 
    // TODO This will break if we have no matching item in the MediaStore. 
    Cursor cursor = getContentResolver().query(videoUri, projection, MediaStore.Video.Media.DATA + " LIKE ?", new String[] { filePath }, null); 
    cursor.moveToFirst(); 

    int columnIndex = cursor.getColumnIndex(projection[0]); 
    videoId = cursor.getLong(columnIndex); 

    cursor.close(); 
    return contentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, videoUri); 
}