binding.qj.setOnClickListener {
//下载图片
Thread() {
kotlin.run {
var url = "http://mpapk.yexi.online/2.jpg"
var xiazai = saveFile2Gallery2(applicationContext, url)
println("-----------xiazai------------")
println(xiazai)
println("----------xiazai-------------")
}
}.start()
}
requestPermission()
}
// 保存图片到相册
fun saveFile2Gallery2(context: Context, url: String): Boolean {
val name = System.currentTimeMillis().toString()
val photoPath = Environment.DIRECTORY_DCIM + "/Camera"
val contentValues = ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, name)
put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
put(MediaStore.MediaColumns.RELATIVE_PATH, photoPath)//保存路径
put(MediaStore.MediaColumns.IS_PENDING, true)
}
}
//返回出一个URI
val insert = context.contentResolver.insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
contentValues
) ?: return false
println("--------------------------")
println(insert)
println("--------------------------")
//这个打开了输出流 直接保存图片就好了
context.contentResolver.openOutputStream(insert).use { os ->
os ?: return false
var x = download(url, os)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
contentValues.put(MediaStore.MediaColumns.IS_PENDING, false)
}
return x
}
return false
}
private fun download(url: String, os: OutputStream): Boolean {
val url = URL(url)
(url.openConnection() as HttpURLConnection).also { conn ->
conn.requestMethod = "GET"
conn.connectTimeout = 5 * 1000
if (conn.responseCode == 200) {
conn.inputStream.use { ins ->
val buf = ByteArray(2048)
var len: Int
while (ins.read(buf).also { len = it } != -1) {
os.write(buf, 0, len)
}
os.flush()
}
return true
} else {
return false
}
}
}
/**
* request permission for the application
*/
private fun requestPermission() {
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(
this,
Manifest.permission.READ_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
1
)
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
1
)
} else {
Log.i(LOG_TAG, "-----------------permission ok")
}
}
网友评论