Android商店内容URI或媒体的文件系统路径

时间:2013-12-29 07:01:38

标签: android android-contentprovider android-mediaplayer android-contentresolver

我有一个应用程序,我允许用户选择一个媒体文件作为警报。我像这样查询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);

其中internalOrExternalMediaStore.Audio.Media.EXTERNAL_CONTENT_URIMediaStore.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?

1 个答案:

答案 0 :(得分:0)

我认为MediaStore只封装了它可以访问的媒体文件,而不是原始提供者,只是一个中间人。我相信,只要用户手机更新,手机的文件系统就会被重新编入索引,这可能会导致更新问题。