微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将图片从URL共享到其他应用

如何解决将图片从URL共享到其他应用

请勿重复进行此操作。.我尝试了每个链接,直到现在我都会按照我尝试过的方式显示

我将简要解释我的代码->

从适配器获取图像到活动->

     val bundle: Bundle = getIntent().getExtras()!!

     val imgurl: String = bundle.getString("image")!!
     val imageUri = Uri.parse(imgurl)

1->>>

完整代码:->引自-> https://stackoverflow.com/questions/49011212/sharing-image-using-intent-on-whats-app-getting-error-sharing-Failed

 val bundle: Bundle = getIntent().getExtras()!!

                val imgurl: String = bundle.getString("image")!!
                 val imageUri = Uri.parse(imgurl)

                shaReiamge.setonClickListener {

                    shareImage(imageUri)
                      }
                    private fun shareImage(imagePath: Uri) {
    val sharingIntent = Intent(Intent.ACTION_SEND)
    sharingIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
    sharingIntent.type = "image/*"
    sharingIntent.putExtra(Intent.EXTRA_STREAM,imagePath)
    //sharingIntent.setPackage("com.whatsapp"); for whatsapp only
    startActivity(
        Intent.createChooser(
            sharingIntent,"Share Image Using"
        )
    ) // for all generic options
}

清单->

 <activity
        android:name=".ProductDetails.Product_details"
        android:launchMode="singleInstance" >
        <intent-filter>
            <action android:name="android.intent.action.SEND" /> <!-- Send
     action required to display activity in share list -->
            <category android:name="android.intent.category.DEFAULT" /> <!--
      Make activity default to launch -->
            <!-- Mime type i.e. what can be shared with this activity only image and text -->
            <data android:mimeType="image/*" />
            <data android:mimeType="text/*" />
        </intent-filter>
    </activity>

以上代码输出:->

与whatsapp或任何应用共享时,不支持文件格式

2 --- >>>此处引用的->>> Share text OR Image On Whatsapp in Android

               shaReiamge.setonClickListener {


                    val whatsappIntent = Intent(Intent.ACTION_SEND)
                    whatsappIntent.type = "image/*"
                    whatsappIntent.putExtra(
                        Intent.EXTRA_STREAM,imageUri
                    ) //add image path

                    startActivity(Intent.createChooser(whatsappIntent,"Share image using"))
               }

以上代码输出:->

与whatsapp或任何应用共享时,不支持文件格式

3->>>

                val bundle: Bundle = getIntent().getExtras()!!

                val imgurl: String = bundle.getString("image")!!
                val imageUri = Uri.parse(imgurl)

                shaReiamge.setonClickListener {


                    val whatsappIntent = Intent(Intent.ACTION_SEND)
                    whatsappIntent.type = "image/*"
                    whatsappIntent.putExtra(
                        Intent.EXTRA_STREAM,Uri.parse(res?.body()!!.data.product_images.get(0).image)
                    ) //direct image from retrofit response

                    startActivity(Intent.createChooser(whatsappIntent,"Share image using"))

以上代码输出:->

与whatsapp或任何应用共享时,不支持文件格式

4->>引用-> https://stackoverflow.com/a/25136183/12553303

val bundle: Bundle = getIntent().getExtras()!!

                val imgurl: String = bundle.getString("image")!!
                val imageUri = Uri.parse(imgurl)

                shaReiamge.setonClickListener {
                    val intent = Intent(Intent.ACTION_SEND)
                    intent.putExtra(Intent.EXTRA_TEXT,"hey view/download this image")
                    val path: String =
                        MediaStore.Images.Media.getContentUri(imgurl).toString()
                    val screenshotUri = Uri.parse(path)

                    intent.putExtra(Intent.EXTRA_STREAM,screenshotUri)
                    intent.type = "image/*"
                    startActivity(Intent.createChooser(intent,"Share image via..."))

以上代码输出:->

与whatsapp或任何应用共享时->共享失败,请稍后再试

5-> ,但仅共享文本而不是图像

                   val sendIntent = Intent()
                    sendIntent.action = Intent.ACTION_SEND
                    sendIntent.putExtra(Intent.EXTRA_TEXT,imgurl)
                    sendIntent.type = "text/plain"
                    startActivity(sendIntent)

日志中的值:-

   Log.e("imgurl",imgurl)
   Log.e("imageUri",imageUri.toString())

E/imgurl: http://....../uploads/prod_img/thumb/medium/9dc6234da018916e545011fa1.jpeg
E/imageUri: http://..../uploads/prod_img/thumb/medium/9dc6234da018916e545011fa1.jpeg

我想分享图片需要帮助,谢谢

解决方法

您必须从URL构建内容URI。有几种方法可以做到这一点。

一种方法是从URL下载图像并从下载的文件构建URI。

如果您使用Glide从url加载图像,则可以通过以下方式完成:

Glide.with(context).asBitmap().load(photoUrl)
        .into(object: CustomTarget<Bitmap>() {

            override fun onLoadCleared(placeholder: Drawable?) {
                // do your stuff,you can load placeholder image here
            }

            override fun onResourceReady(resource: Bitmap,transition: Transition<in Bitmap>?) {


                val cachePath = File(context.cacheDir,"images")
                cachePath.mkdirs() // don't forget to make the directory
                val stream = FileOutputStream(cachePath.toString() + "/image.png") // overwrites this image every time
                resource.compress(Bitmap.CompressFormat.PNG,100,stream)
                stream.close()

                val imagePath = File(context.cacheDir,"images")
                val newFile = File(imagePath,"image.png")
                val contentUri: Uri = FileProvider.getUriForFile(context,"${BuildConfig.APPLICATION_ID}.provider",newFile)

                val intent = Intent(Intent.ACTION_SEND)
                intent.type = "image/*"
                intent.putExtra(Intent.EXTRA_STREAM,contentUri)
                context.startActivity(Intent.createChooser(intent,"Choose..."))

            }
        })

别忘了在清单中添加provider

    <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths" />
    </provider>

provider_paths

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <cache-path name="cache" path="/" />
</paths>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。