แบ่งปันภาพจาก 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 --- >>> อ้างอิงจากสิ่งนี้ - >>> แบ่งปันข้อความหรือรูปภาพบน Whatsapp ใน 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
ฉันต้องการแบ่งปันภาพต้องการความช่วยเหลือขอบคุณล่วงหน้า
คำตอบ
คุณต้องสร้าง URI เนื้อหาจาก url มีหลายวิธีในการดำเนินการนี้
วิธีหนึ่งคือการสร้างที่ดาวน์โหลดภาพจาก 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>