将图片从URL共享到其他应用 [英] share image from URL to other apps

查看:99
本文介绍了将图片从URL共享到其他应用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请勿重复进行此操作..我已经尝试了每个链接,并且我将按照直到现在为止我尝试过的内容进行展示

Dont make this as duplicate..i have tried every link and i will show following what i have tried till now

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

i will briefly explain my code-->

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

fetching image from adapter to activity-->

     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

full code:--> referred from -->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或任何应用共享时,不支持文件格式

above code output:-->

when sharing to whatsapp or any app the file format is not supported

2 --->>>>

以上代码输出:->

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

above code output:-->

when sharing to whatsapp or any app the file format is not supported

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或任何应用共享时,不支持文件格式

above code output:-->

when sharing to whatsapp or any app the file format is not supported

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或任何应用共享时->共享失败,请稍后重试

above code output:-->

when sharing to whatsapp or any app --> sharing failed,please try again later

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

5--> but it is only sharing text not image

                   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

我要分享图片需要帮助,请先感谢

i want to share an image need help thanks in advance

推荐答案

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

You have to build content URI from the url. There are several ways to do this.

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

One way is to build that is download image from url and build URI from the downloaded file.

如果您正在使用 Glide 从网址加载图片,则可以通过以下方式完成:

If you are using Glide to load image from url, then it can be done in following way:

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>

这篇关于将图片从URL共享到其他应用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆