簡體   English   中英

為什么Android可以刪除Media.EXTERNAL_CONTENT_URI下保存的數據?

[英]Why an Android may delete data saved under Media.EXTERNAL_CONTENT_URI?

為什么在卸載/掛載SD卡后,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卡再次可用時將其還原嗎?

我發現了錯誤。 希望有人會覺得有用。 如果要在卸載/安裝SD卡后保留媒體,則需要在保存新媒體后立即通知新媒體:

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

如果這樣做,在重新安裝SD卡后,您的媒體仍然可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM