Android多媒体信息获取

Android多媒体信息获取,第1张

Android开发中,常常需要获取本地或者网络多媒体的一些基本信息。MediaMetadataRetriever类位于androidmedia包下,提供了用于从输入媒体文件检索帧和元数据的统一接口,可以很方便实现这些功能。

本例中提供了获取本地视频和网络视频第一帧的功能,首先初始化MediaMetadataRetriever,如果是本地视频设置数据源时通过 UrifromFile()转化为Uri对象,再通过MediaMetadataRetriever的getFrameAtTime()方法默认获取第一帧。如果是网络视频直接将url设置为数据源即可。

你获取的uri没有问题。但assets目录下的不能使用这种方法读取。你得把它先复制到sdcard中,然后从sdcard中传递这个至于原因嘛:assets目录里面的资源文件还在应用程序的apk文件中,一个压缩文件中。所以不能这样读

Android调用系统拍照的代码:

创建Intent Intent openCameraIntent = new Intent(MediaStoreACTION_IMAGE_CAPTURE);

String imagePath = EnvironmentgetExternalStorageDirectory() + "/image" ;

设置文件路径 File file = new File(imagePath);

if(!fileexists()){

filemkdirs(); }

设置URI,指定相册拍照后保存的路径,Uri imageUri = UrifromFile(new File(imagePath, "imagejsp"));

openCameraIntentputExtra(MediaStoreEXTRA_OUTPUT, imageUri);

startActivityForResult(openCameraIntent, REQUEST_CODE_TAKING_PICTURES);

拍照完以后,文件就会保存在这个指定的目录下了。Uri 里指定了相机拍照的路径。

public String getFileType(String fileUri){

File file = new File(fileUri);

String fineName = filegetName();

String fileType = fileNamesubstring(fileNamelastIndexOf(\"\")+1,fileNamelength())

return fileType;

}

从谷歌官方文档的描述来看, 在 Android N版本 以上,直接将file://形式的Uri暴露给了APP应用,会抛出 FileUriExposedException 异常。

Android N以下版本,仍然可以使用 file:// 形式的Uri,但强烈不推荐。

不推荐使用 file:// 的原因在于:

Android N以上版本,将使用 content:// 代替 file:// 形式的Uri,系统将赋予APP临时的权限去获取目标Uri的资源。

FileProvider 是ContentProvider的一个子类。使用 FileProvider可以创建 content:// 形式的Uri,保证APP对文件资源的安全共享。

要使用FileProvider解决Android N以上版本androidosFileUriExposedException的问题,首先要在AndroidManifestxml注册该FileProvider:

然后在res文件夹里添加创建xml/file_pathsxml文件:

创建 content:// Uri,通过FileProvidergetUriForFile(Context context, String authorities, File file)实现。为了实现兼容,可通过根据设备系统使用不同的方法获取Uri:

这样就同时兼容 file:// 和 content:// 的Uri形式,下面的例子是调用系统相机拍照时,通过FileUtils获取照片保存路径的Uri:

参考博客:

在安卓中打开音乐、视频、、文档等文件是需要有读取SD卡权限的,如果是60以下的系统,则直接在清单文件中声明SD卡读取权限即可;如果是60或以上,则需要动态申请权限。

在70以下中打开文件时,通过intent调用系统安装得人软件打开文件就好了,但是在android70及以上的机子上这么做会报androidosFileUriExposedException错误,

1)读取SD卡

2)动态申请权限

//设备API大于60时,主动申请权限(读取文件的权限)

public static  void requestPermission(Activity context) {

    if (BuildVERSIONSDK_INT >= BuildVERSION_CODESM) {

        if (ContextCompatcheckSelfPermission(context, ManifestpermissionWRITE_EXTERNAL_STORAGE)

                != PackageManagerPERMISSION_GRANTED) {

            ActivityCompatrequestPermissions(context, new String[]{ManifestpermissionWRITE_EXTERNAL_STORAGE,

                    ManifestpermissionREAD_EXTERNAL_STORAGE}, 0);

        }

    }

}

3)读取文件

intent = OpenFileUtilopenFile(filePath+"/"+FileName+""+end);

使用OpenFileUtil这个。链接: >

ContentResolver resolver = getContentResolver();

Cursor cursor = resolverquery(originalUri, proj, null, null, null);

// 按我个人理解 这个是获得用户选择的的索引值

int column_index = cursorgetColumnIndexOrThrow(MediaStoreImagesMediaDATA);

// 将光标移至开头 ,这个很重要,不小心很容易引起越界

cursormoveToFirst();

// 最后根据索引值获取路径

String path = cursorgetString(column_index);

这样就获得了的路径。

下面说上传,现在一般上传都用Ok>

以上就是关于Android多媒体信息获取全部的内容,包括:Android多媒体信息获取、如何获得assets目录下文件的uri、一个关于android的问题,我通过下面的方法调用相机,可是怎么可以在拍照结束后获取照片的路径呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9314437.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存