Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android存储媒体的内容URI或文件系统路径_Android_Android Contentprovider_Android Mediaplayer_Android Contentresolver - Fatal编程技术网

Android存储媒体的内容URI或文件系统路径

Android存储媒体的内容URI或文件系统路径,android,android-contentprovider,android-mediaplayer,android-contentresolver,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() .

我有一个应用程序,允许用户选择一个媒体文件用作警报。我像这样查询
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\u CONTENT\u URI
MediaStore.Audio.Media.INTERNAL\u CONTENT\u 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?

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