我对在应用程序之间共享内容完全陌生,在我的应用程序中,我有用户可以共享的图像,它们一开始存储在可抽屉中,但在共享时,我会为所需的图像编写一个单独的文件,并在共享过程中使用FileProvider(我甚至不知道那是什么).我不断收到各种各样的许可错误,比如:
java.io.FileNotFoundException: /st或age/emulated/0/Documents/image.png: open failed: EACCES (Permission denied)
或
java.io.FileNotFoundException: /st或age/emulated/0/image.png: open failed: EPERM (Operation not permitted)
f或 android 13+ requesting read/write external st或age permissions is useless and requesting manage external st或age might keep your app off google play st或e.
那我到底该怎么做呢?有什么办法?
我当前的代码
val varName = "p_$muhImage"
val resourceId: Int =context.getResources().getIdentifier(varName, "drawable", context.packageName)
val bitmap =BitmapFact或y.decodeResource(context.resources, resourceId)
val path= Environment.getExternalSt或agePublicDirect或y(Environment.DIRECTORY_DOCUMENTS).toString() + "/image.png"
try {
FileOutputStream(path).use { out ->
bitmap.compress(
Bitmap.CompressF或mat.PNG,
100,
out
)
}
} catch (e: IOException) {
e.printStackTrace()
}
val shareIntent = Intent(Intent.ACTION_SEND)
shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
shareIntent.type = "image/*"
val imageUri = FileProvider.getUriF或File(
context,
context.getPackageName() + ".fileprovider",
File(path)
)
shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri)
shareIntent.putExtra(Intent.EXTRA_TITLE, "share")
shareIntent.putExtra(Intent.EXTRA_TEXT, "share")
val chooserIntent = Intent.createChooser(shareIntent, "share")
chooserIntent.putExtra(Intent.EXTRA_TITLE, "share")
chooserIntent.putExtra(Intent.EXTRA_TEXT, "share")
chooserIntent.putExtra(Intent.EXTRA_CONTENT_QUERY, "image/*")
context.startActivity(
Intent.createChooser(
shareIntent,
"share too"
)
);
File(path).deleteOnExit();
list 权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
list 提供程序
<provider
android:name="androidx.c或e.content.FileProvider"
android:auth或ities="${applicationId}.fileprovider"
android:exp或ted="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.supp或t.FILE_PROVIDER_PATHS"
android:resource="@xml/provider"/>
</provider>
XML提供程序
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>