修复:解决google play的图片和视频权限要求
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
package uts.sdk.modules.uniChooseSystemImage
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.graphics.Color
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.provider.MediaStore
|
||||
import android.view.WindowManager
|
||||
import android.widget.LinearLayout
|
||||
import androidx.activity.result.PickVisualMediaRequest
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import java.util.Locale
|
||||
|
||||
|
||||
class ChooseSystemImageActivity : FragmentActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setStatusBarTransparent(this)
|
||||
val layout = LinearLayout(this)
|
||||
layout.setBackgroundColor(Color.TRANSPARENT)
|
||||
setContentView(layout)
|
||||
if (intent.hasExtra("page_orientation")) {
|
||||
requestedOrientation =
|
||||
intent.getIntExtra("page_orientation", ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
|
||||
}
|
||||
val count = intent.getIntExtra("count", 9)
|
||||
val type = intent.getIntExtra("type", 1)
|
||||
val mediaType: VisualMediaType = when (type) {
|
||||
1 -> {
|
||||
ActivityResultContracts.PickVisualMedia.ImageOnly
|
||||
}
|
||||
|
||||
2 -> {
|
||||
ActivityResultContracts.PickVisualMedia.VideoOnly
|
||||
}
|
||||
|
||||
3 -> {
|
||||
ActivityResultContracts.PickVisualMedia.ImageAndVideo
|
||||
}
|
||||
|
||||
else -> {
|
||||
ActivityResultContracts.PickVisualMedia.ImageOnly
|
||||
}
|
||||
}
|
||||
val pickMultipleMedia = if (count == 1) {
|
||||
this.registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
||||
val intent = Intent()
|
||||
if (uri != null) {
|
||||
this.contentResolver.takePersistableUriPermission(
|
||||
uri,
|
||||
Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||
)
|
||||
var path = uri.toString()
|
||||
val mediaT = this.contentResolver.getType(uri)?.lowercase(Locale.ENGLISH)
|
||||
val m = Media(
|
||||
if (mediaT?.startsWith("video/") == true) {
|
||||
2
|
||||
} else if (mediaT?.startsWith("image/") == true) {
|
||||
1
|
||||
} else {
|
||||
0
|
||||
}, path
|
||||
)
|
||||
intent.putExtra("paths", arrayOf(m))
|
||||
this.setResult(RESULT_OK, intent)
|
||||
this.finish()
|
||||
} else {
|
||||
this.setResult(RESULT_OK, intent)
|
||||
this.finish()
|
||||
}
|
||||
}
|
||||
} else
|
||||
this.registerForActivityResult(
|
||||
ActivityResultContracts.PickMultipleVisualMedia(count)
|
||||
) { result ->
|
||||
val paths = mutableListOf<Media>()
|
||||
for (uri in result) {
|
||||
this.contentResolver.takePersistableUriPermission(
|
||||
uri,
|
||||
Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||
)
|
||||
var path = uri.toString()
|
||||
val mediaT = this.contentResolver.getType(uri)?.lowercase(Locale.ENGLISH)
|
||||
val m = Media(
|
||||
if (mediaT?.startsWith("video/") == true) {
|
||||
2
|
||||
} else if (mediaT?.startsWith("image/") == true) {
|
||||
1
|
||||
} else {
|
||||
0
|
||||
}, path
|
||||
)
|
||||
paths.add(m)
|
||||
}
|
||||
val intent = Intent()
|
||||
intent.putExtra("paths", paths.toTypedArray())
|
||||
this.setResult(RESULT_OK, intent)
|
||||
this.finish()
|
||||
}
|
||||
pickMultipleMedia.launch(
|
||||
PickVisualMediaRequest.Builder()
|
||||
.setMediaType(mediaType)
|
||||
.build()
|
||||
)
|
||||
}
|
||||
|
||||
private fun getFilePathFromUri(uri: Uri): String? {
|
||||
var filePath: String? = null
|
||||
if (uri.scheme == "file") {
|
||||
filePath = uri.path
|
||||
} else if (uri.scheme == "content") {
|
||||
val contentResolver = contentResolver
|
||||
val cursor =
|
||||
contentResolver.query(uri, arrayOf(MediaStore.Images.Media.DATA), null, null, null)
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
val columnIndex = cursor.getColumnIndex("_data")
|
||||
filePath = cursor.getString(columnIndex)
|
||||
cursor.close()
|
||||
}
|
||||
}
|
||||
return filePath
|
||||
}
|
||||
|
||||
private fun setStatusBarTransparent(activity: Activity) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
||||
val window = activity.window
|
||||
// 设置透明状态栏标志
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
|
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
window.clearFlags(
|
||||
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
|
||||
or WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
|
||||
)
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
|
||||
window.statusBarColor = Color.TRANSPARENT
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user