欢迎光临散文网 会员登陆 & 注册

图片的保存与更新到媒体库

2023-06-04 17:39 作者:便宜酒  | 我要投稿

基本流程:检查/请求权限,保存到应用程序私有目录,通知媒体库更新

在调用保存图片到方法之前,先检查权限,使用

并且清单里应当有

【重写回调方法以得到授权情况】

PackageManager是一个系统级别的类,用于管理和查询Android设备上已安装的应用程序信息。通过该类提供的方法,可以获取应用程序的包名、版本号、权限信息等,并可以查询设备上已安装的应用程序列表。

是一个自定义的外存写权限的状态码,可以表示用户首次使用软件时判断到用户未授权并请求授权,使用ActivityCompat.requestPermissions()方法请求授权。这个方法需要传入一个字符串数组,表示要请求的权限列表,以及一个整数值,也就是这个状态码。


【保存图片到本地的方法】

是应用程序的私有路径。

【通知媒体库显示这张图片】

低于10的安卓版本直接就插入到媒体库了。从Android 10开始,访问外部存储设备上的文件需要使用新的API,并且需要进行特殊处理。将图片信息存放到一个ContentValues对象里,它用于在应用程序中将数据存储到数据库中或从数据库中读取数据。

具体的内容可以参考官方文档:https://developer.android.com/training/data-storage/shared/media

MediaScannerConnection.scanFile()可以扫描指定的文件并将其添加到系统媒体库中。一般来说,当相机或录音应用程序拍照或录音时,这些文件会自动被添加到系统媒体库中。但是,如果应用程序创建了一些图片、视频或音频文件,就要使用该方法。

第一个参数是上下文(Context)对象,第二个参数是要扫描的文件路径。当调用该方法后,系统会异步地扫描指定的文件,并将其添加到系统媒体库中。可以重写onScanCompleted()方法,该方法会在文件扫描完成后被调用。

context.getContentResolver().insert()用于将数据插入到指定的ContentProvider中。第一个参数是Uri对象,表示要插入数据的ContentProvider的位置,即MediaStore.Images.Media.EXTERNAL_CONTENT_URI;第二个参数是ContentValues对象。

这两个API可能会结合使用。使用context.getContentResolver().insert()方法将该图片的信息插入到系统媒体库的ContentProvider中,以便其他应用程序能够访问该图片。然后,使用MediaScannerConnection.scanFile()方法扫描该图片,并将其添加到系统媒体库中,以确保该图片能够在相册等应用程序中显示出来。

需要注意的是,在使用MediaScannerConnection.scanFile()方法时,不需要插入数据到ContentProvider中。该方法只是将指定的文件添加到系统媒体库中,但不会在ContentProvider中创建对应的记录。


MediaStore.Images.Media.EXTERNAL_CONTENT_URI用于访问外图片文件。可以通过该URI来查询、插入、更新和删除外部存储设备中的图片文件。

例如,使用ContentResolver类的query()方法来查询符合特定条件的图片文件,并获取它们的相关信息,如文件名、大小、日期等。还可以使用insert()方法将新的图片文件插入到外部存储设备中,并使用update()delete()方法来更新和删除已有的图片文件。

URI是Uniform Resource Identifier(统一资源标识符),用于标识和定位一个资源的字符串标识符。它可以用来唯一地标识网络上的资源、本地文件、数据库记录等等。

URL是Uniform Resource Locator(统一资源定位器),是一种特殊的URI,用于指定网络上的资源的位置。URL包含了协议、主机名、路径、查询参数等信息,可以被浏览器和其他应用程序用来获取互联网上的资源。

URI和URL的区别在于,URI只是一个标识符,用于唯一地标识一个资源,而URL则包含了更多的信息,用于定位和获取该资源。


图片的保存与更新到媒体库的评论 (共 条)

分享到微博请遵守国家法律