我有一个应用程序,我允许用户选择一个媒体文件作为警报。我像这样查询MediaStore
:
String[] projec = {MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME};
Cursor c = getActivity().getContentResolver()
.query(internalOrExternal, projec, null, null, null);
其中internalOrExternal
是MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
或MediaStore.Audio.Media.INTERNAL_CONTENT_URI
的参数。
我使用MediaStore.Audio.Media.DATA
列中的值,如果它以content://
开头,否则我会调用MediaStore.Audio.Media.getContentUriForPath(c.getString(MediaStore.Audio.Media.DATA))
,如果结果来自content://
,我会使用该值
当我加载包含媒体URI的数据结构时,我会根据MediaStore
检查URI以确保它仍然存在,如果不存在,我将其设置为默认警报(保证存在。)
最近,我有用户(都使用三星设备)抱怨每隔几周所有警报都设置为使用默认警报,即使他们将其设置为使用自定义警报(在一个用户的情况下,超过40个警报)恢复到默认值)。他们向我保证他们没有清除数据,或做任何会影响应用程序存储的事情(有人告诉我这是在更新到Android 4.3之后发生的)。
某些供应商是否可能重新分配其内容URI?我是否应该存储内容URI或文件系统路径,并在我想播放警报时将其解析为内容URI?
答案 0 :(得分:0)
我认为MediaStore只封装了它可以访问的媒体文件,而不是原始提供者,只是一个中间人。我相信,只要用户手机更新,手机的文件系统就会被重新编入索引,这可能会导致更新问题。