2011-01-19 37 views
2

爲什麼Android可能會在卸載/掛載SD卡操作後刪除保存在Media.EXTERNAL_CONTENT_URI下的數據?如何避免這種情況?爲什麼Android可能會刪除保存在Media.EXTERNAL_CONTENT_URI下的數據?

我使用此URI和來自上下文的默認內容解析器保存鈴聲。

的代碼是類似的:

ContentValues values = new ContentValues(); 
values.put(Media.DATA, AudikoFileStorageAccessor.getInstance().getAbsolutePathForRingtone(ringtone.getId())); 
values.put(Media.TITLE, ringtone.mSong); 
values.put(Media.DISPLAY_NAME, ringtone.mSong); 
values.put(Media.ARTIST, ringtone.mArtist); 
values.put(Media.MIME_TYPE, "audio/mpeg"); 
values.put(Media.SIZE, ringtone.mSize * 1024); 
values.put(Media.IS_RINGTONE, (RingtoneManager.TYPE_RINGTONE == type || type == 0)); 
values.put(Media.IS_NOTIFICATION, (RingtoneManager.TYPE_NOTIFICATION == type)); 
values.put(Media.IS_ALARM, (RingtoneManager.TYPE_ALARM == type)); 
values.put(Media.IS_MUSIC, false); 

Uri newUri = mContext.getContentResolver().insert(
       Media.getContentUriForPath(AudikoFileStorageAccessor.getInstance().getAbsolutePathForRingtone(
         ringtone.getId())), values); 

RingtoneManager.setActualDefaultRingtoneUri(mContext, type, newUri); 

一切正常,但在我卸載SD卡,然後重新安裝它這個鈴聲不存在了,無法在此表中找到。

我應該如何處理UNMOUNT事件並以某種方式備份我保存的數據,並在SD卡再次可用時立即恢復它?

回答

1

我發現了這個錯誤。希望有人會發現這有用。如果你想保持SD卡後,媒體已在卸載/安裝,你只需要在保存它以通知這樣的新媒體:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri)); 

如果你這樣做,你回來安裝SD卡後,您的媒體將仍然可用。

相關問題