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