阅读视频文件名

时间:2016-08-05 16:55:20

标签: android permissions uri android-contentresolver

我的SD卡中有一个视频文件,我想获取此文件的名称,我使用了这种方法:

public static String getFileName(Uri uri, ContentResolver resolver) {
    String result = null;
    if (uri.getScheme().equals("content")) {
        Cursor cursor = resolver.query(uri, null, null, null, null);
        try {
            if (cursor != null && cursor.moveToFirst()) {
                result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
            }
        } finally {
            cursor.close();
        }
    }
    if (result == null) {
        result = uri.getPath();
        int cut = result.lastIndexOf('/');
        if (cut != -1) {
            result = result.substring(cut + 1);
        }
    }
    return result;
}

但有时我得到SecurityException:

FATAL EXCEPTION: main  
Process: com.company, PID: 14012
                                                                         java.lang.RuntimeException: Unable to start activity ComponentInfo{com.company.MainActivity}: java.lang.SecurityException: Permission Denial: opening provider com.android.externalstorage.ExternalStorageProvider from ProcessRecord{43247db0 14012:com.company/u0a370} (pid=14012, uid=10370) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2319)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2370)
                                                                             at android.app.ActivityThread.access$800(ActivityThread.java:155)
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                             at android.os.Looper.loop(Looper.java:136)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5426)
                                                                             at java.lang.reflect.Method.invokeNative(Native Method)
                                                                             at java.lang.reflect.Method.invoke(Method.java:515)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
                                                                             at dalvik.system.NativeStart.main(Native Method)
                                                                          Caused by: java.lang.SecurityException: Permission Denial: opening provider com.android.externalstorage.ExternalStorageProvider from ProcessRecord{43247db0 14012:com.company/u0a370} (pid=14012, uid=10370) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS
                                                                             at android.os.Parcel.readException(Parcel.java:1472)
                                                                             at android.os.Parcel.readException(Parcel.java:1426)
                                                                             at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:3039)
                                                                             at android.app.ActivityThread.acquireProvider(ActivityThread.java:4660)
                                                                             at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2347)
                                                                             at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1425)
                                                                             at android.content.ContentResolver.query(ContentResolver.java:445)
                                                                             at android.content.ContentResolver.query(ContentResolver.java:404)
                                                                             at com.company.Utils.Utilities.getFileName(Utilities.java:104)
                                                                             at com.company.MainActivity.onCreate(MainActivity.java:115)
                                                                             at android.app.Activity.performCreate(Activity.java:5296)
                                                                             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2283)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2370) 
                                                                             at android.app.ActivityThread.access$800(ActivityThread.java:155) 
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                             at android.os.Looper.loop(Looper.java:136) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5426) 
                                                                             at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                             at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
                                                                             at dalvik.system.NativeStart.main(Native Method) 

有没有其他方法可以使用uri获取我的文件名,或者我的代码中有什么错误。

任何帮助,谢谢。

0 个答案:

没有答案