繁体   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