我有一个分享url图片的应用程序。上一次Android更新,当我想在instagram订阅源中共享一张图片时,我收到instagram的消息“无法加载图片”。
但我可以分享图片故事,直接信息,以及任何地方。。。我只有instagram订阅了这个问题。
public void onShareItemOreo() {
// Get access to bitmap image from view
imageView = (ImageView) findViewById(R.id.thumbnail);
// Get access to the URI for the bitmap
Uri bmpUri = prepareShareIntent(imageView);
if (bmpUri != null) {
//outfile is the path of the image stored in the gallery
// Construct a ShareIntent with link to image
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
shareIntent.setData(bmpUri);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.setType("image/*");
shareIntent.putExtra(Intent.EXTRA_TEXT,marketLink);
// Launch sharing dialog for image
startActivity(Intent.createChooser(shareIntent, "Share Image"));
} else {
//
}
}
public Uri prepareShareIntent(ImageView imageView) {
// Fetch Bitmap Uri locally
Drawable drawable = imageView.getDrawable();
Bitmap bmp = null;
if (drawable instanceof BitmapDrawable){
bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
} else {
return null;
}
Uri bmpUri = getBitmapFromDrawable(bmp);// see previous remote images section and notes for API > 23
// Construct share intent as described above based on bitmap
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
shareIntent.setType("image/*");
return bmpUri;
}
你的uri是“content://packagename/xxx.jpg“,它必须是”content://media/external/images/media/...“它会成功的。”。
Facebook正在处理这个bug,我们等等!订阅以接收此错误报告的更新通知。https://developers.facebook.com/support/bugs/1326888287510350/
更新:本周早些时候发布的Instagram版本修复了这个问题。解决办法不再必要。
上面提到的所有解决方案都不适用于我,因为Instagram应用程序中的一项更改似乎打破了通过ContentProvider
或其衍生产品FileProvider
直接共享的局面。
我确实注意到共享MediaStore
内容Uri仍然有效,因为在共享之前写入MediaStore的其他应用程序(如Google Photos)仍然能够共享要馈送的图像。
您可以将图像File
插入到MediaStore
中,如下所示:
@SuppressLint("InlinedApi")
fun insertImageToMediaStore(file: File, relativePath: String): Uri? {
val values = ContentValues().apply {
put(MediaStore.Images.Media.DISPLAY_NAME, file.name)
val mimeType = when (file.extension) {
"jpg", "jpeg" -> "jpeg"
"png" -> "png"
else -> return null
}
put(MediaStore.Images.Media.MIME_TYPE, "image/$mimeType")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
put(MediaStore.MediaColumns.RELATIVE_PATH, relativePath)
put(MediaStore.MediaColumns.IS_PENDING, 1)
}
}
val collection = when (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
true -> MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL)
false -> MediaStore.Images.Media.EXTERNAL_CONTENT_URI
}
val uri = contentResolver.insert(collection, values)
uri?.let {
contentResolver.openOutputStream(uri)?.use { outputStream ->
try {
outputStream.write(file.readBytes())
outputStream.close()
} catch (e: Exception) {
e.printStackTrace()
}
}
values.clear()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
values.put(MediaStore.Images.Media.IS_PENDING, 0)
contentResolver.update(uri, values, null, null)
}
} ?: throw RuntimeException("MediaStore failed for some reason")
return uri
}
然后使用返回的Uri
,通过Intent进行如下共享:
val filePath = "/data/data/io.jammy.withintent/files/IMG-20200321_093350_2020-122758.jpg" // this is an example path from an app-internal image file
val context: Context? = this
val intent = Intent(Intent.ACTION_SEND)
intent.type = "image/*"
insertImageToMediaStore(File(filePath), "Pictures/Your Subdirectory")?.let { uri ->
val clipData = ClipData.newRawUri("Image", uri)
intent.clipData = clipData
intent.putExtra(Intent.EXTRA_STREAM, uri)
val target = Intent.createChooser(intent, "Share Image")
target?.let { context?.startActivity(it) }
} ?: run {
Log.e(TAG, "Unsupported image file")
return
}
虽然这并不理想,因为图像随后被写入MediaStore
,这在许多情况下可能不是理想的行为,但它重新启用了中期共享的能力,而Instagram修复了他们的狂欢。
在这里,我共享图像意图。图像在一个可绘制的文件夹中。给出这个: 代码:
我使用这个代码,但它不能正常工作。 当我使用text类型时,它可以正常工作。 但是我想共享一个文本和一个图像。 而共享的意图在Facebook中不起作用。
如何与ShareActionProvider共享drawable文件夹中的图像?我已经证明了很多事情,但它不起作用。 本例中的uri是什么?Uri=Uri。解析(“android。resource://com.android.example/“R.drawable.photo);不起作用。 非常感谢。
问题内容: 这是我的代码,但这是针对单个文件的解决方案。 我可以像下面的单个文件一样共享多个文件和上载吗? 问题答案: 是的,但是您需要使用而不是。 这绝对可以简化,但我在其中保留了一些内容,以便您可以分解所需的每个步骤。 更新 :从API 24开始,共享文件URI将导致FileUriExposedException。为了解决这个问题,您可以将compileSdkVersion切换为23或更低版本
我正在尝试分享音频(.mp3)从第三个应用程序到我的android应用程序。当我接收到音频并获得意图信息(Uri soundUri=(Uri)intent.GetParcelableExtra(intent.Extra_Stream))时,Uri有错误的数据。路径正确,但文件名已用数字(例如5348)重命名,没有扩展名,实际文件名为Audio-6151616.mp3 因此,完整路径是/storag
问题内容: 我正在从python脚本中调用一个so文件。据我了解,我真的不需要释放使用ctypes在python中打开的共享库。但是,在我的so文件代码中,它dlopen另一个so文件并且不执行dlclose()。在这种情况下,从python端使用安全吗?我不必释放在ctypes内部加载的共享库soe文件吗? 问题答案: 始终遵循 “自己清洁后清理 ”的规则(尽管现代技术会为您提供清洁方面的帮助)