不得不說太惡心了,實現這么個功能折騰了大半天!搜索引擎搜出來的結果五花八門亂七八糟的(到現在為止我還不知道如何獲取到系統相冊的路徑)。
來介紹一下我的實現方法吧。
需求是:把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