URI获取

作者: 霁逸lei | 来源:发表于2021-05-24 19:39 被阅读0次

1.android7.0后方法有变

public static Uri getUri(Context context, String url){
    File tempFile = new File(url);
    //判断版本
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {   //如果在Android7.0以上,使用FileProvider获取Uri
        try{
            return FileProvider.getUriForFile(context, context.getPackageName(), tempFile);
        }catch (Exception e){
            e.printStackTrace();
        }
    } else {    //否则使用Uri.fromFile(file)方法获取Uri
        return Uri.fromFile(tempFile);
    }
    return null;
}


//7.0以后需要配置相关manifest[关于 Android 7.0 适配中 FileProvider 部分的总结_滴水穿石,点石为金-CSDN博客](https://blog.csdn.net/growing_tree/article/details/71190741)

Uri uriForFile = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".silicompressor.provider", file);

<provider
    android:name=".provider.GenericFileProvider"
    android:authorities="${applicationId}.silicompressor.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths" />
</provider>

2.通过provider

private static Uri getVideoContentUri(Context context, File videoFile) {
    String filePath = videoFile.getAbsolutePath();
    Cursor cursor = context.getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
            new String[]{MediaStore.Video.Media._ID,MediaStore.MediaColumns.DATA}, MediaStore.Video.Media.DATA + "=? ",
            new String[]{filePath}, MediaStore.Video.Media.DEFAULT_SORT_ORDER);
    if (cursor != null && cursor.moveToFirst()) {
        int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
        String string = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA));
        Log.d(TAG, "id:" + id + "===" + string);
        Uri baseUri = Uri.parse("content://media/external/video/media");
        return Uri.withAppendedPath(baseUri, "" + id);
    } else {
        if (videoFile.exists()) {
            ContentValues values = new ContentValues();
            values.put(MediaStore.Video.Media.DATA, filePath);
            return context.getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
        } else {
            return null;
        }
    }
}

private void getUri(File videoFile) {
    String filePath = videoFile.getAbsolutePath();
    Uri mUri = Uri.parse("content://media/external/video/media");
    Uri mImageUri = null;
    Cursor cursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Images.Media.DEFAULT_SORT_ORDER);
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        String data = cursor.getString(cursor
                .getColumnIndex(MediaStore.MediaColumns.DATA));
        if (filePath.equals(data)) {
            int ringtoneID = cursor.getInt(cursor
                    .getColumnIndex(MediaStore.MediaColumns._ID));
            Log.d(TAG, "ringtoneID:" + ringtoneID);
            mImageUri = Uri.withAppendedPath(mUri, ""
                    + ringtoneID);
            break;
        }
        cursor.moveToNext();
    }
}

相关文章

网友评论

      本文标题:URI获取

      本文链接:https://www.haomeiwen.com/subject/gvqijltx.html