MediaStore.Audio.Media.EXTERNAL_CONTENT_URI报告为未知URI


Uri uri = contentResolver.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, audioValues);

在某些设备上产生:

. lang。UnsupportedOperationException: Unknown URI: content://media/external/audio/mediaandroid.app.ActivityThread.handleCreateService (ActivityThread.java: 2887)android.app.ActivityThread.-wrap4 (ActivityThread.java)android.app.ActivityThread H.handleMessage美元(ActivityThread.java: 1427)android.os.Handler.dispatchMessage (Handler.java: 102)android.os.Looper.loop (Looper.java: 148)android.app.ActivityThread.main (ActivityThread.java: 5422)java.lang.reflect.Method.invoke (Method.java)com.android.internal.os.ZygoteInit MethodAndArgsCaller.run美元(ZygoteInit.java: 726)com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 616)java.lang.UnsupportedOperationException: Unknown URI: content://media/external/audio/mediaandroid.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.java: 167)android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.java: 135)android.content.ContentProviderProxy.insert (ContentProviderNative.java: 476)android.content.ContentResolver.insert (ContentResolver.java: 1231)company.app.MainService.setupFilesForAudioRecording (MainService.java: 388)company.app.MainService.onCreate (MainService.java: 239)android.app.ActivityThread.handleCreateService (ActivityThread.java: 2877)android.app.ActivityThread.-wrap4 (ActivityThread.java)android.app.ActivityThread H.handleMessage美元(ActivityThread.java: 1427)android.os.Handler.dispatchMessage (Handler.java: 102)android.os.Looper.loop (Looper.java: 148)android.app.ActivityThread.main (ActivityThread.java: 5422)java.lang.reflect.Method.invoke (Method.java)com.android.internal.os.ZygoteInit MethodAndArgsCaller.run美元(ZygoteInit.java: 726)

我不明白我怎么会得到这个错误。mediastore。audio。media。EXTERNAL_CONTENT_URI是一个未知的URI?这是设备没有外部存储的情况吗?

开发者文档说:

外部存储并不总是可用的,因为用户可以将外部存储挂载为USB存储,在某些情况下可以将其从设备中移除。

但这似乎是非常罕见的情况。

此异常与resourcedirectory中的path有关。点击链接查看代码示例。

编辑:有可能某些设备没有外部存储,所以在执行任何存储操作之前,您应该添加一些检查。

// call this function , if true , go ahead ,storage available
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

最新更新