不得不说太恶心了,实现这么个功能折腾了大半天!搜索引擎搜出来的结果五花八门乱七八糟的(到现在为止我还不知道如何获取到系统相册的路径)。
来介绍一下我的实现方法吧。
需求是:把ImageView里的图片保存到系统相册。
1、 在ApplicationMainfest。xml中添加申请磁盘读写权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2、动态申请磁盘读写权限,上面这样写还不能获得权限,所以要动态申请一下,方法很多这里简单写下吧。
在MainActivity代码里定义一个方法。
fun GetPermission()
{
if (Build.VERSION.SDK_INT >= 23) {
val REQUEST_CODE_CONTACT = 101
val permissions = arrayOf<String>(Manifest.permission.WRITE_EXTERNAL_STORAGE)
//验证是否许可权限
for (str in permissions) {
if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
//申请权限
this.requestPermissions(permissions, REQUEST_CODE_CONTACT)
}
}
}
}
然后调用一下。
3、在布局中加入ImageView,然后随便绑定一张本地图片(实际应用的时候应该是网络图片,本例就不赘述了,保存图片的方法一样)
4、布局中加入一个按钮,给它加上点击事件处理。
5、在按钮点击事件里保存图片。把ImageView的内容取出,接着使用MediaStore的方法把图片内容保存到系统相册
this.bSave.setOnClickListener()
{
println("bSave clicked!")
val draw = this.imageView_photo.drawable as BitmapDrawable
val bitmap = draw.bitmap
MediaStore.Images.Media.insertImage(
contentResolver,
bitmap!!,
"image_file",
"file")
}
运行效果
点击按钮后图片被保存到系统相册
更多
MediaStore.Images.Media.insertImage()保存图片成功后会返回新建图片的路径。
日志信息
可以根据这个返回值来弹出对话框提示保存成功,需要的话自己写下就好了,本例不再介绍。
相关信息
官方文档:
https://developer.android.com/reference/android/provider/MediaStore.Images.Media.html
网友评论