Android ใช้ Intent และรายการเพิ่มเติมที่เกี่ยวข้อง เพื่อให้ผู้ใช้แชร์ข้อมูลได้อย่างรวดเร็ว ได้ง่ายๆ โดยใช้แอปโปรดของพวกเขา
Android ให้ผู้ใช้แชร์ข้อมูลระหว่างแอป 2 วิธี ดังนี้
- Sharesheet ของ Android ออกแบบมาเพื่อส่งเนื้อหาไปนอกแอปและ/หรือส่งโดยตรง ให้ผู้ใช้คนอื่นทราบ เช่น การแชร์ URL กับเพื่อน
- รีโซลเวอร์ Intent ของ Android เหมาะที่สุดสำหรับการส่งข้อมูลไปยัง งานที่กำหนดไว้อย่างดี ตัวอย่างเช่น การเปิด PDF จากแอปของคุณและให้ผู้ใช้ ให้เลือกผู้ชมที่ต้องการ
เมื่อสร้าง Intent คุณต้องระบุการดำเนินการที่ต้องการให้ความตั้งใจทำ
Android ใช้การดำเนินการ ACTION_SEND
ส่งข้อมูลจากกิจกรรมหนึ่งไปยังอีกกิจกรรมหนึ่ง
แม้จะข้ามขอบเขตของกระบวนการ คุณต้องระบุ
ข้อมูลและประเภทของข้อมูล ระบบจะระบุกิจกรรมที่เข้ากันได้โดยอัตโนมัติ
สามารถรับข้อมูลและแสดงผลให้กับผู้ใช้ได้ ในกรณีของรีโซลเวอร์ Intent
หากมีเพียงกิจกรรมเดียวที่จัดการกับความตั้งใจได้ กิจกรรมนั้นก็จะเริ่มต้นขึ้นทันที
เหตุผลที่ควรใช้ Sharesheet ของ Android
![](https://developer.android.com/static/images/training/sharing/sharesheet.png?authuser=19&hl=th)
เราขอแนะนำเป็นอย่างยิ่งให้ใช้ Android Sharesheet เพื่อสร้างความสอดคล้องให้กับผู้ใช้ทั่วทั้ง แอป อย่าแสดงรายการเป้าหมายการแชร์ของแอปของคุณเอง หรือสร้างรายการเป้าหมายของคุณเอง รูปแบบต่างๆ ของ Sharesheet
Sharesheet ของ Android ช่วยให้ผู้ใช้แชร์ข้อมูลกับ ผู้ใช้ที่ใช่พร้อมการแนะนำแอปที่เกี่ยวข้อง ซึ่งทั้งหมดนี้ทำได้ด้วยการแตะเพียงครั้งเดียว Sharesheet สามารถแนะนำเป้าหมายที่โซลูชันที่กำหนดเองใช้งานไม่ได้ และใช้การจัดอันดับที่สอดคล้องกัน เนื่องจาก Sharesheet สามารถพิจารณาข้อมูลเกี่ยวกับแอปและกิจกรรมของผู้ใช้ ที่ใช้ได้เฉพาะในระบบ
Android Sharesheet ของ Android ยังมีฟีเจอร์ที่มีประโยชน์มากมายสำหรับนักพัฒนาซอฟต์แวร์ ตัวอย่างเช่น คุณสามารถ ให้ทำดังนี้
- ดูว่าผู้ใช้แชร์เสร็จเมื่อใดและจากที่ใด
- เพิ่ม
ChooserTarget
และเป้าหมายแอปที่กำหนดเอง - แสดงตัวอย่างเนื้อหาแบบ Rich Text เริ่มตั้งแต่ Android 10 (API ระดับ 29)
- ยกเว้นเป้าหมายที่ตรงกับชื่อคอมโพเนนต์ที่เฉพาะเจาะจง
ใช้ Sharesheet ของ Android
สำหรับการแชร์ทุกประเภท ให้สร้าง Intent และตั้งค่าการดำเนินการเป็น
Intent.ACTION_SEND
หากต้องการแสดง Sharesheet ของ Android โปรดเรียกใช้
Intent.createChooser()
,
กำลังส่งออบเจ็กต์ Intent
ไปให้
โดยจะแสดง Intent เวอร์ชันที่แสดงไฟล์ Android Sharesheet เสมอ
ส่งเนื้อหาข้อความ
การใช้งานที่ตรงไปตรงมาและนิยมมากที่สุดของ Android Sharesheet คือการส่งเนื้อหาข้อความจาก กิจกรรมหนึ่งไปยังอีกกิจกรรมหนึ่ง ตัวอย่างเช่น เบราว์เซอร์ส่วนใหญ่สามารถแชร์ URL ของ URL ที่แสดงอยู่ในปัจจุบัน เป็นข้อความด้วยแอปอื่น ซึ่งจะเป็นประโยชน์สำหรับการแชร์บทความหรือเว็บไซต์กับเพื่อนๆ ผ่าน อีเมลหรือเครือข่ายสังคม ตัวอย่างวิธีการมีดังนี้
Kotlin
val sendIntent: Intent = Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, "This is my text to send.") type = "text/plain" } val shareIntent = Intent.createChooser(sendIntent, null) startActivity(shareIntent)
Java
Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.setType("text/plain"); Intent shareIntent = Intent.createChooser(sendIntent, null); startActivity(shareIntent);
นอกจากนี้ คุณยังใส่ข้อมูลเพิ่มเติมเพื่อระบุข้อมูลเพิ่มเติมได้ เช่น ผู้รับอีเมล
(EXTRA_EMAIL
EXTRA_CC
,
EXTRA_BCC
)
เรื่องอีเมล
(EXTRA_SUBJECT
) เป็นต้น
หมายเหตุ: แอปอีเมลบางแอป เช่น Gmail จะต้องมี
String[]
สำหรับสิทธิประโยชน์เพิ่มเติม เช่น
EXTRA_EMAIL
และ EXTRA_CC
ใช้
putExtra(String, String[])
เพื่อเพิ่มรายการเหล่านี้ลงใน Intent ของคุณ
ส่งเนื้อหาไบนารี
แชร์ข้อมูลไบนารีโดยใช้การดำเนินการ ACTION_SEND
กำหนดประเภท MIME ที่เหมาะสม แล้ววาง URI ให้กับข้อมูลในข้อมูลเพิ่มเติม
EXTRA_STREAM
, เป็น
ที่แสดงในตัวอย่างต่อไปนี้
โดยทั่วไปจะใช้เพื่อแชร์รูปภาพ แต่ก็สามารถใช้เพื่อแชร์เนื้อหาไบนารีได้ทุกประเภท
Kotlin
val shareIntent: Intent = Intent().apply { action = Intent.ACTION_SEND // Example: content://com.google.android.apps.photos.contentprovider/... putExtra(Intent.EXTRA_STREAM, uriToImage) type = "image/jpeg" } startActivity(Intent.createChooser(shareIntent, null))
Java
Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); // Example: content://com.google.android.apps.photos.contentprovider/... shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage); shareIntent.setType("image/jpeg"); startActivity(Intent.createChooser(shareIntent, null));
แอปพลิเคชันที่เป็นผู้รับต้องการสิทธิ์เพื่อเข้าถึงข้อมูลที่ Uri
ชี้ไปที่ มีวิธีที่แนะนำ 2 วิธีดังนี้
- เก็บข้อมูลไว้ใน
ContentProvider
ของคุณเอง โปรดตรวจสอบว่าอื่นๆ แอปได้รับสิทธิ์ที่ถูกต้องในการเข้าถึงผู้ให้บริการของคุณ กลไกที่แนะนำให้ใช้ คือการใช้สิทธิ์ต่อ URI ซึ่งก็คือ ชั่วคราวและให้สิทธิ์เฉพาะแอปพลิเคชันที่ได้รับ วิธีง่ายๆ ในการสร้างContentProvider
แบบนี้เพื่อใช้FileProvider
ชั้นเรียนตัวช่วย - ใช้ระบบ
MediaStore
MediaStore
มีไว้สำหรับประเภท MIME ของวิดีโอ เสียง และรูปภาพเป็นหลัก อย่างไรก็ตาม เริ่มต้นด้วย Android 3.0 (API ระดับ 11) นอกจากนี้ยังสามารถจัดเก็บประเภทที่ไม่ใช่สื่อ สำหรับข้อมูลเพิ่มเติม โปรดดูMediaStore.Files
สามารถแทรกไฟล์ลงในMediaStore
โดยใช้scanFile()
, หลังจากนั้นUri
แบบcontent://
ที่เหมาะสมแก่การแชร์ไปยังonScanCompleted()
Callback โปรดทราบว่าเมื่อเพิ่มลงในระบบMediaStore
แล้ว เนื้อหาดังกล่าวจะเข้าถึงได้ แอปบนอุปกรณ์เคลื่อนที่
ใช้ประเภท MIME ที่เหมาะสม
ระบุประเภท MIME ที่เฉพาะเจาะจงที่สุดกับข้อมูลที่คุณให้ความสนใจ
การส่ง เช่น ใช้ text/plain
เมื่อแชร์ข้อความธรรมดา นี่เป็นตัวอย่าง
ประเภท MIME ทั่วไปเมื่อส่งข้อมูลแบบง่ายใน Android
ผู้รับลงทะเบียนสำหรับ | ผู้ส่งส่ง |
---|---|
text/* |
|
`image/*` |
|
video/* |
|
นามสกุลไฟล์ที่รองรับ | application/pdf |
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับประเภท MIME โปรดดูที่ เอียนา องค์กรจัดการข้อมูลโดเมน MIME อย่างเป็นทางการ
Sharesheet ของ Android อาจแสดงตัวอย่างเนื้อหา ทั้งนี้ขึ้นอยู่กับประเภท MIME ที่ระบุ ใช้บ้าง ฟีเจอร์พรีวิวจะใช้ได้เฉพาะบางประเภทเท่านั้น
แชร์เนื้อหาหลายชิ้น
หากต้องการแชร์เนื้อหาหลายรายการ ให้ใช้ ACTION_SEND_MULTIPLE
ดำเนินการร่วมกับรายการ URI ที่ชี้ไปยังเนื้อหา ประเภท MIME จะแตกต่างกันไปตาม
ของเนื้อหาที่คุณแชร์ เช่น หากแชร์รูปภาพ JPEG 3 ภาพ คุณจะใช้ประเภท
"image/jpg"
สำหรับการผสมรูปภาพประเภทต่างๆ ให้ใช้ "image/*"
เพื่อจับคู่
กิจกรรมที่จัดการรูปภาพทุกประเภท แม้ว่าเราจะสามารถแบ่งปันเนื้อหาหลายประเภท แต่เรา
ก็ไม่แนะนำเพราะสิ่งนี้
ไม่ทราบชัดเจนว่าผู้รับต้องการส่งอะไร หากจำเป็นต้องส่งหลายๆ ประเภท ให้ใช้
"*/*"
การแยกวิเคราะห์ ขึ้นอยู่กับแอปพลิเคชันที่ได้รับ
และประมวลผลข้อมูลของคุณ ตัวอย่างเช่น
Kotlin
val imageUris: ArrayList<Uri> = arrayListOf( // Add your image URIs here imageUri1, imageUri2 ) val shareIntent = Intent().apply { action = Intent.ACTION_SEND_MULTIPLE putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris) type = "image/*" } startActivity(Intent.createChooser(shareIntent, null))
Java
ArrayList<Uri> imageUris = new ArrayList<Uri>(); imageUris.add(imageUri1); // Add your image URIs here imageUris.add(imageUri2); Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE); shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); shareIntent.setType("image/*"); startActivity(Intent.createChooser(shareIntent, null));
ตรวจสอบว่าออบเจ็กต์ Uri
ที่ระบุชี้
ข้อมูลที่แอปพลิเคชันที่ใช้รับสามารถเข้าถึงได้
เพิ่มเนื้อหาที่มีการจัดรูปแบบในตัวอย่างข้อความ
เริ่มตั้งแต่ Android 10 (API ระดับ 29) Sharesheet ของ Android จะแสดงตัวอย่างของข้อความที่ปรากฏ
แชร์ ในบางกรณี ข้อความที่แชร์อาจเข้าใจยาก ลองแชร์
URL ที่ซับซ้อน เช่น https://www.google.com/search?ei=2rRVXcLkJajM0PEPoLy7oA4
สมบูรณ์ยิ่งขึ้น
สามารถให้ความมั่นใจกับผู้ใช้เกี่ยวกับสิ่งที่แบ่งปัน
หากกำลังแสดงตัวอย่างข้อความ คุณสามารถตั้งชื่อ ภาพขนาดย่อ หรือทั้ง 2 อย่างได้ เพิ่มคำอธิบายลงใน
Intent.EXTRA_TITLE
ก่อนโทรหา Intent.createChooser()
และเพิ่ม
ภาพขนาดย่อที่เกี่ยวข้องโดยใช้ ClipData
หมายเหตุ: URI เนื้อหารูปภาพได้มาจาก
FileProvider
โดยปกติจะมาจาก <cache-path>
ที่กำหนดค่าไว้
โปรดดูข้อมูลเพิ่มเติมที่การแชร์ไฟล์ อย่าลืมให้
Sharesheet มีสิทธิ์ที่เหมาะสมในการอ่านรูปภาพที่คุณต้องการใช้เป็นภาพขนาดย่อ สำหรับข้อมูลเพิ่มเติม
ดูIntent.FLAG_GRANT_READ_URI_PERMISSION
ตัวอย่างเช่น
Kotlin
val share = Intent.createChooser(Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, "https://developer.android.com/training/sharing/") // (Optional) Here you're setting the title of the content putExtra(Intent.EXTRA_TITLE, "Introducing content previews") // (Optional) Here you're passing a content URI to an image to be displayed data = contentUri flags = Intent.FLAG_GRANT_READ_URI_PERMISSION }, null) startActivity(share)
Java
Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "https://developer.android.com/training/sharing/"); // (Optional) Here you're setting the title of the content sendIntent.putExtra(Intent.EXTRA_TITLE, "Introducing content previews"); // (Optional) Here you're passing a content URI to an image to be displayed sendIntent.setData(contentUri); sendIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Show the Sharesheet startActivity(Intent.createChooser(sendIntent, null));
ตัวอย่างจะมีลักษณะดังนี้
![](https://developer.android.com/static/images/training/sharing/sharing_content_preview.png?authuser=19&hl=th)
เพิ่มการดำเนินการที่กำหนดเองใน Sharesheet
![](https://developer.android.com/static/images/training/sharing/sharesheet_custom_actions.png?authuser=19&hl=th)
ภาพหน้าจอของการดำเนินการที่กำหนดเองใน Android Sharesheet
ใน Android 14 (API ระดับ 34) ขึ้นไป แอปจะเพิ่มการดำเนินการที่กำหนดเองลงใน Sharesheet ของ Android ได้
การดำเนินการที่กำหนดเองจะแสดงเป็นไอคอนการดำเนินการขนาดเล็กที่ด้านบนของ Sharesheet ของ Android และแอปต่างๆ
สามารถระบุ Intent
เป็นการดำเนินการที่เกิดขึ้นเมื่อคลิกไอคอน
หากต้องการเพิ่มการดำเนินการที่กำหนดเองใน Android Sharesheet ให้สร้าง
ChooserAction
กับ
ChooserAction.Builder
คุณระบุ PendingIntent
ได้เมื่อมีการเรียกใช้การดำเนินการเมื่อคลิกไอคอน สร้าง
อาร์เรย์ที่มีการดำเนินการที่กำหนดเองทั้งหมดของคุณและระบุเป็น
EXTRA_CHOOSER_CUSTOM_ACTIONS
ของการแชร์ Intent
Kotlin
val sendIntent = Intent(Intent.ACTION_SEND) .setType("text/plain") .putExtra(Intent.EXTRA_TEXT, text) val shareIntent = Intent.createChooser(sendIntent, null) val customActions = arrayOf( ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT ) ).build() ) shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, customActions) context.startActivity(shareIntent)
Java
Intent sendIntent = new Intent(Intent.ACTION_SEND) .setType("text.plain") .putExtra(Intent.EXTRA_TEXT, text); Intent shareIntent = Intent.createChooser(sendIntent, null); ChooserAction[] actions = new ChooserAction[]{ new ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, new Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_CANCEL_CURRENT ) ).build() }; shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, actions); context.startActivity(shareIntent);
เพิ่มเป้าหมายที่กำหนดเอง
Sharesheet ของ Android ให้คุณระบุออบเจ็กต์ ChooserTarget
ได้สูงสุด 2 รายการ
แสดงก่อนทางลัดการแชร์และเป้าหมายตัวเลือกโหลดจาก ChooserTargetServices
นอกจากนี้คุณยัง
ระบุ Intent ได้สูงสุด 2 รายการซึ่งชี้ไปยังกิจกรรมที่แสดงอยู่ในรายการ
ก่อนคำแนะนำแอป
![](https://developer.android.com/static/images/training/sharing/customshare.png?authuser=19&hl=th)
เพิ่ม Intent.EXTRA_CHOOSER_TARGETS
และ Intent.EXTRA_INITIAL_INTENTS
ไปยัง
Intent ที่แชร์หลังการโทร
Intent.createChooser()
:
Kotlin
val share = Intent.createChooser(myShareIntent, null).apply { putExtra(Intent.EXTRA_CHOOSER_TARGETS, myChooserTargetArray) putExtra(Intent.EXTRA_INITIAL_INTENTS, myInitialIntentArray) }
Java
Intent shareIntent = Intent.createChooser(sendIntent, null); share.putExtra(Intent.EXTRA_CHOOSER_TARGETS, myChooserTargetArray); share.putExtra(Intent.EXTRA_INITIAL_INTENTS, myInitialIntentArray);
โปรดใช้ฟีเจอร์นี้ด้วยความระมัดระวัง Intent
ที่กำหนดเองทุกรายการ
และ ChooserTarget
ที่คุณเพิ่มจะลดจำนวนที่ระบบแนะนำ โดยทั่วไปเรา
คุณไม่ควรเพิ่มเป้าหมายที่กำหนดเอง ตัวอย่างที่เหมาะสมโดยทั่วไปในการเพิ่ม
Intent.EXTRA_INITIAL_INTENTS
มีไว้เพื่อระบุการดำเนินการเพิ่มเติมที่ผู้ใช้ทำได้ที่แชร์
เนื้อหา ตัวอย่างเช่น ผู้ใช้แชร์รูปภาพ และ Intent.EXTRA_INITIAL_INTENTS
ใช้เพื่อ
ให้ส่งลิงก์แทนก็ได้ ตัวอย่างที่เหมาะสมโดยทั่วไปของการเพิ่ม Intent.EXTRA_CHOOSER_TARGETS
คือการแสดงผู้คนหรืออุปกรณ์ที่เกี่ยวข้องจากแอปของคุณ
ยกเว้นเป้าหมายที่เฉพาะเจาะจงตามคอมโพเนนต์
คุณสามารถยกเว้นเป้าหมายที่เฉพาะเจาะจงได้โดยการระบุ Intent.EXTRA_EXCLUDE_COMPONENTS
ทำเช่นนี้เพื่อนำเป้าหมายที่คุณควบคุมออกได้เท่านั้น กรณีการใช้งานทั่วไปคือการซ่อน
การกําหนดเป้าหมายการแชร์ของแอปเมื่อผู้ใช้แชร์จากภายในแอป เนื่องจากมีแนวโน้มที่จะแชร์
นอกแอปของคุณ
เพิ่ม Intent.EXTRA_EXCLUDE_COMPONENTS
ลงใน Intent หลังเรียกใช้ Intent.createChooser()
:
Kotlin
val share = Intent.createChooser(Intent(), null).apply { // Only use for components you have control over val excludedComponentNames = arrayOf(ComponentName("com.example.android", "ExampleClass")) putExtra(Intent.EXTRA_EXCLUDE_COMPONENTS, excludedComponentNames) }
Java
Intent shareIntent = Intent.createChooser(new Intent(), null); // Only use for components you have control over ComponentName[] excludedComponentNames = { new ComponentName("com.example.android", "ExampleClass") }; shareIntent.putExtra(Intent.EXTRA_EXCLUDE_COMPONENTS, excludedComponentNames);
ดูข้อมูลเกี่ยวกับการแชร์
การทราบเมื่อผู้ใช้แชร์และเป้าหมายที่เลือกจะเป็นประโยชน์มาก
Sharesheet ของ Android ช่วยให้คุณได้รับข้อมูลนี้โดยส่ง ComponentName
ของ
กำหนดเป้าหมายที่ผู้ใช้เลือกโดยใช้ IntentSender
ก่อนอื่น ให้สร้าง PendingIntent
สำหรับ BroadcastReceiver
และระบุ
IntentSender
ใน Intent.createChooser()
:
Kotlin
var share = Intent(Intent.ACTION_SEND) // ... val pi = PendingIntent.getBroadcast( myContext, requestCode, Intent(myContext, MyBroadcastReceiver::class.java), PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT ) share = Intent.createChooser(share, null, pi.intentSender)
Java
Intent share = new Intent(ACTION_SEND); ... PendingIntent pi = PendingIntent.getBroadcast(myContext, requestCode, new Intent(myContext, MyBroadcastReceiver.class), PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); share = Intent.createChooser(share, null, pi.getIntentSender());
รับการติดต่อกลับใน MyBroadcastReceiver
แล้วรอตรวจสอบ
Intent.EXTRA_CHOSEN_COMPONENT
:
Kotlin
override fun onReceive(context: Context, intent: Intent) { ... val clickedComponent : ComponentName = intent.getParcelableExtra(EXTRA_CHOSEN_COMPONENT); }
Java
@Override public void onReceive(Context context, Intent intent) { ... ComponentName clickedComponent = intent.getParcelableExtra(EXTRA_CHOSEN_COMPONENT); }
เพิ่มการดำเนินการที่กำหนดเองใน Sharesheet
ใน Android 14 (API ระดับ 34) ขึ้นไป แอปจะเพิ่มการดำเนินการที่กำหนดเองลงใน Sharesheet ของ Android ได้
สร้าง ChooserAction
กับ
ChooserAction.Builder
คุณระบุ PendingIntent
ได้เมื่อมีการเรียกใช้การดำเนินการเมื่อคลิกไอคอน สร้าง
อาร์เรย์ที่มีการดำเนินการที่กำหนดเองทั้งหมดของคุณและระบุเป็น
EXTRA_CHOOSER_CUSTOM_ACTIONS
ของการแชร์ Intent
Kotlin
val sendIntent = Intent(Intent.ACTION_SEND) .setType("text/plain") .putExtra(Intent.EXTRA_TEXT, text) val shareIntent = Intent.createChooser(sendIntent, null) val customActions = arrayOf( ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT ) ).build() ) shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, customActions) context.startActivity(shareIntent)
Java
Intent sendIntent = new Intent(Intent.ACTION_SEND) .setType("text.plain") .putExtra(Intent.EXTRA_TEXT, text); Intent shareIntent = Intent.createChooser(sendIntent, null); ChooserAction[] actions = new ChooserAction[]{ new ChooserAction.Builder( Icon.createWithResource(context, R.drawable.ic_custom_action), "Custom", PendingIntent.getBroadcast( context, 1, new Intent(Intent.ACTION_VIEW), PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_CANCEL_CURRENT ) ).build() }; shareIntent.putExtra(Intent.EXTRA_CHOOSER_CUSTOM_ACTIONS, actions); context.startActivity(shareIntent);
ใช้รีโซลเวอร์ Intent ของ Android
![](https://developer.android.com/static/images/training/sharing/send_intent.png?authuser=19&hl=th)
ภาพหน้าจอของรีโซลเวอร์ Intent ACTION_SEND
รีโซลเวอร์ Intent ของ Android จะใช้ได้ดีที่สุดเมื่อส่งข้อมูลไปยังแอปอื่นซึ่งเป็นส่วนหนึ่งของขั้นตอนงานที่กำหนดไว้อย่างชัดเจน
หากต้องการใช้รีโซลเวอร์ Intent ของ Android ให้สร้าง Intent และเพิ่มส่วนเสริมตามที่คุณจะเรียกใช้
Sharesheet ของ Android แต่อย่าโทร
Intent.createChooser()
หากมีแอปพลิเคชันที่ติดตั้งหลายรายการที่มีตัวกรองตรงกัน
ACTION_SEND
และประเภท MIME ระบบจะแสดงกล่องโต้ตอบที่มีคำอธิบายที่เรียกว่ารีโซลเวอร์ความตั้งใจ
ซึ่งช่วยให้ผู้ใช้เลือกเป้าหมายที่จะแชร์ด้วย หากแอปพลิเคชันเดียว
ก็จะทำงาน
ตัวอย่างวิธีใช้รีโซลเวอร์ Intent ของ Android เพื่อส่งข้อความมีดังนี้
Kotlin
val sendIntent: Intent = Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, "This is my text to send.") type = "text/plain" } startActivity(sendIntent)
Java
Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); sendIntent.setType("text/plain"); startActivity(sendIntent);
ดูข้อมูลเพิ่มเติม
โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับการส่งข้อมูลที่ ตัวกรอง Intent และตัวกรอง Intent