mirror of
https://github.com/lifegpc/eh_downloader_flutter.git
synced 2026-07-08 01:30:28 +08:00
fix: 尝试修复 Android 8/8.1 复制图片问题
This commit is contained in:
@@ -1,6 +1,12 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
<uses-permission
|
||||||
|
android:name="android.permission.QUERY_ALL_PACKAGES"
|
||||||
|
android:maxSdkVersion="29"
|
||||||
|
tools:ignore="QueryAllPackagesPermission" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".MyApplication"
|
android:name=".MyApplication"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
|||||||
@@ -3,6 +3,9 @@ package com.lifegpc.ehf.util
|
|||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
import android.content.ClipboardManager
|
import android.content.ClipboardManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Build
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
import com.lifegpc.ehf.MyApplication
|
import com.lifegpc.ehf.MyApplication
|
||||||
import com.lifegpc.ehf.annotation.ChannelMethod
|
import com.lifegpc.ehf.annotation.ChannelMethod
|
||||||
@@ -21,6 +24,7 @@ object ClipboardUtils {
|
|||||||
MyApplication.applicationContext.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
MyApplication.applicationContext.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||||
val clipData =
|
val clipData =
|
||||||
ClipData.newUri(MyApplication.applicationContext.contentResolver, "image", uri)
|
ClipData.newUri(MyApplication.applicationContext.contentResolver, "image", uri)
|
||||||
|
grantUriPermissionWhenNeed(uri)
|
||||||
cbm.setPrimaryClip(clipData)
|
cbm.setPrimaryClip(clipData)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,4 +50,25 @@ object ClipboardUtils {
|
|||||||
"image/gif" -> "gif"
|
"image/gif" -> "gif"
|
||||||
else -> throw IllegalArgumentException("$mimeType is not supported")
|
else -> throw IllegalArgumentException("$mimeType is not supported")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在 Android 8/8.1系统上,手动授予所有app读取uri权限
|
||||||
|
* @param uri
|
||||||
|
* @see <a href="https://github.com/chromium/chromium/blob/a5a4f9bfe95e3dcd685c20192b244e0a7e6c1c06/ui/android/java/src/org/chromium/ui/base/ClipboardImpl.java">chromium</a> 中的 grantUriPermission
|
||||||
|
*/
|
||||||
|
private fun grantUriPermissionWhenNeed(uri: Uri) {
|
||||||
|
if (Build.VERSION.SDK_INT !in arrayOf(Build.VERSION_CODES.O, Build.VERSION_CODES.O_MR1)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
MyApplication.applicationContext.packageManager.getInstalledPackages(0).forEach {
|
||||||
|
MyApplication.applicationContext.grantUriPermission(
|
||||||
|
it.packageName,
|
||||||
|
uri,
|
||||||
|
Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user