Android ใช้ Intent และส่วนเสริมที่เกี่ยวข้องเพื่อให้ผู้ใช้แชร์ข้อมูลได้อย่างรวดเร็วและ ง่ายดายโดยใช้แอปโปรด
Android มี 2 วิธีให้ผู้ใช้แชร์ข้อมูลระหว่างแอป
- แชร์ชีตของ Android ออกแบบมาเพื่อส่งเนื้อหาภายนอกแอปและ/หรือส่งไปยังผู้ใช้รายอื่นโดยตรงเป็นหลัก เช่น การแชร์ URL กับเพื่อน
- ตัวแก้ไข Intent ของ Android เหมาะที่สุดสำหรับการส่งข้อมูลไปยัง ขั้นตอนถัดไปของงานที่กำหนดไว้อย่างดี เช่น การเปิด PDF จากแอปของคุณและอนุญาตให้ผู้ใช้ เลือกโปรแกรมอ่านที่ต้องการ
เมื่อสร้างความตั้งใจ คุณจะระบุการกระทำที่ต้องการให้ความตั้งใจนั้นทำ
Android ใช้การดำเนินการ ACTION_SEND
เพื่อส่งข้อมูลจากกิจกรรมหนึ่งไปยังอีกกิจกรรมหนึ่ง
แม้จะอยู่ข้ามขอบเขตของกระบวนการก็ตาม คุณต้องระบุ
ข้อมูลและประเภทของข้อมูล ระบบจะระบุกิจกรรมที่เข้ากันได้โดยอัตโนมัติ
ซึ่งรับข้อมูลได้ และแสดงต่อผู้ใช้ ในกรณีของตัวแก้ไขความตั้งใจ
หากมีเพียงกิจกรรมเดียวที่จัดการความตั้งใจได้ กิจกรรมนั้นจะเริ่มทันที
เหตุผลที่ควรใช้ Android Sharesheet

เราขอแนะนำเป็นอย่างยิ่งให้ใช้ชีตการแชร์ของ Android เพื่อสร้างความสอดคล้องให้แก่ผู้ใช้ในแอปต่างๆ อย่าแสดงรายการเป้าหมายการแชร์ของแอปเองหรือสร้าง รูปแบบชีตการแชร์ของคุณเอง
ชีตการแชร์ของ Android ช่วยให้ผู้ใช้แชร์ข้อมูลกับ บุคคลที่เหมาะสม พร้อมคำแนะนำแอปที่เกี่ยวข้องได้ด้วยการแตะเพียงครั้งเดียว ชีตการแชร์สามารถแนะนำเป้าหมายที่โซลูชันที่กำหนดเองไม่พร้อมใช้งาน และใช้การจัดอันดับที่สอดคล้องกัน เนื่องจากชีตแชร์สามารถพิจารณาข้อมูลเกี่ยวกับกิจกรรมของแอปและผู้ใช้ ซึ่งมีเฉพาะในระบบเท่านั้น
นอกจากนี้ ชีตการแชร์ของ Android ยังมีฟีเจอร์ที่มีประโยชน์มากมายสำหรับนักพัฒนาแอปด้วย ตัวอย่างเช่น คุณสามารถทำสิ่งต่อไปนี้ได้
- ดูว่าผู้ใช้แชร์เมื่อใดและแชร์ไปที่ใด
- เพิ่ม
ChooserTarget
และเป้าหมายแอปที่กำหนดเอง - แสดงตัวอย่างเนื้อหาข้อความที่จัดรูปแบบแล้วตั้งแต่ Android 10 (API ระดับ 29) เป็นต้นไป
- ยกเว้นเป้าหมายที่ตรงกับชื่อคอมโพเนนต์ที่เฉพาะเจาะจง
ใช้ Android Sharesheet
สำหรับการแชร์ทุกประเภท ให้สร้าง Intent และตั้งค่าการดำเนินการเป็น
Intent.ACTION_SEND
หากต้องการแสดงชีตการแชร์ของ Android ให้เรียกใช้
Intent.createChooser()
โดยส่งออบเจ็กต์ Intent
ไปให้
โดยจะแสดงผล Intent เวอร์ชันที่แสดงชีตการแชร์ของ Android เสมอ
ส่งเนื้อหาข้อความ
การใช้งานชีตแชร์ของ Android ที่ตรงไปตรงมาและพบได้บ่อยที่สุดคือการส่งเนื้อหาข้อความจากกิจกรรมหนึ่งไปยังอีกกิจกรรมหนึ่ง เช่น เบราว์เซอร์ส่วนใหญ่สามารถแชร์ 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[])
เพื่อเพิ่มรายการเหล่านี้ลงในเจตนา
ส่งเนื้อหาไบนารี
แชร์ข้อมูลไบนารีโดยใช้การดำเนินการ 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()
หลังจากนั้นระบบจะส่งcontent://
รูปแบบUri
ที่เหมาะสำหรับการแชร์ไปยังแฮนเดิลonScanCompleted()
การเรียกกลับที่ระบุ โปรดทราบว่าเมื่อเพิ่มลงในระบบMediaStore
แล้ว แอปใดก็ตามในอุปกรณ์จะเข้าถึงเนื้อหาได้
ใช้ประเภท MIME ที่ถูกต้อง
ระบุประเภท MIME ที่เฉพาะเจาะจงที่สุดสำหรับข้อมูลที่คุณส่ง เช่น ใช้ text/plain
เมื่อแชร์ข้อความธรรมดา ต่อไปนี้คือ
ประเภท MIME ที่พบบ่อยเมื่อส่งข้อมูลอย่างง่ายใน Android
ตัวรับสัญญาณลงทะเบียนสำหรับ | ผู้ส่งส่ง |
---|---|
text/* |
|
`image/*` |
|
video/* |
|
นามสกุลไฟล์ที่รองรับ | application/pdf |
ดูข้อมูลเพิ่มเติมเกี่ยวกับประเภท MIME ได้ที่รีจิสทรีอย่างเป็นทางการของประเภทสื่อ MIME ของ IANA
ชีตการแชร์ของ Android อาจแสดงตัวอย่างเนื้อหา ทั้งนี้ขึ้นอยู่กับประเภท MIME ที่ระบุ ฟีเจอร์เวอร์ชันตัวอย่างบางอย่างใช้ได้กับบางประเภทเท่านั้น
แชร์เนื้อหาหลายรายการ
หากต้องการแชร์เนื้อหาหลายรายการ ให้ใช้ACTION_SEND_MULTIPLE
action ร่วมกับรายการ 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
ที่ระบุชี้
ไปยังข้อมูลที่แอปพลิเคชันที่รับเข้าถึงได้
เพิ่มเนื้อหารูปแบบ Rich ลงในตัวอย่างข้อความ
ตั้งแต่ Android 10 (API ระดับ 29) เป็นต้นไป ชีตการแชร์ของ Android จะแสดงตัวอย่างข้อความที่กำลังแชร์
ในบางกรณี ข้อความที่แชร์อาจเข้าใจยาก ลองแชร์ URL ที่ซับซ้อน เช่น https://www.google.com/search?ei=2rRVXcLkJajM0PEPoLy7oA4
ตัวอย่างที่สมบูรณ์ยิ่งขึ้น
จะช่วยให้ผู้ใช้มั่นใจได้ว่ากำลังแชร์อะไร
หากกำลังดูตัวอย่างข้อความ คุณสามารถตั้งชื่อ รูปภาพปก หรือทั้ง 2 อย่างก็ได้ เพิ่มคำอธิบายใน
Intent.EXTRA_TITLE
ก่อนเรียกใช้ Intent.createChooser()
และเพิ่ม
ภาพปกที่เกี่ยวข้องโดยใช้ ClipData
หมายเหตุ: URI ของเนื้อหารูปภาพจะมาจาก
FileProvider
ซึ่งมักจะมาจาก <cache-path>
ที่กำหนดค่าไว้
ดูข้อมูลเพิ่มเติมได้ที่การแชร์ไฟล์ อย่าลืมให้สิทธิ์ที่เหมาะสมแก่
ชีตการแชร์เพื่ออ่านรูปภาพที่คุณต้องการใช้เป็นภาพปก ดูข้อมูลเพิ่มเติมได้ที่ 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));
ตัวอย่างจะมีลักษณะดังนี้

เพิ่มการกระทำแบบกำหนดเองลงในชีตการแชร์

ภาพหน้าจอของการดำเนินการที่กำหนดเองในชีตการแชร์ของ Android
ใน Android 14 (API ระดับ 34) ขึ้นไป แอปจะเพิ่มการดำเนินการที่กำหนดเองลงในชีตการแชร์ของ Android ได้
การดำเนินการที่กำหนดเองจะแสดงเป็นไอคอนการดำเนินการขนาดเล็กที่ด้านบนของชีตการแชร์ของ Android และแอป
สามารถระบุ Intent
เป็นการดำเนินการที่เรียกใช้เมื่อคลิกไอคอน
หากต้องการเพิ่มการดำเนินการที่กำหนดเองในชีตการแชร์ของ 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);
เพิ่มเป้าหมายที่กำหนดเอง
ชีตการแชร์ของ Android ช่วยให้คุณระบุออบเจ็กต์ได้สูงสุด 2 รายการที่แสดงก่อนทางลัดการแชร์และเป้าหมายตัวเลือกที่โหลดจาก ChooserTargetServices
ChooserTarget
นอกจากนี้ คุณยัง
ระบุ Intent ได้สูงสุด 2 รายการที่ชี้ไปยังกิจกรรมที่แสดง
ก่อนคำแนะนำแอปได้ด้วย

เพิ่ม 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.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);
ดูข้อมูลเกี่ยวกับการแชร์
การทราบว่าผู้ใช้แชร์เมื่อใดและเลือกเป้าหมายใดอาจมีประโยชน์
ชีตการแชร์ของ 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); }
เพิ่มการกระทำแบบกำหนดเองลงในชีตการแชร์
ใน Android 14 (API ระดับ 34) ขึ้นไป แอปจะเพิ่มการดำเนินการที่กำหนดเองลงในชีตการแชร์ของ 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

ภาพหน้าจอของตัวแก้ไข Intent ACTION_SEND
ตัวแก้ไข Intent ของ Android จะใช้ได้ดีที่สุดเมื่อส่งข้อมูลไปยังแอปอื่นเป็นส่วนหนึ่งของโฟลว์งานที่กำหนดไว้อย่างดี
หากต้องการใช้ตัวแก้ไข Intent ของ Android ให้สร้าง Intent แล้วเพิ่มส่วนเสริมเหมือนกับที่คุณใช้เรียก
ชีตการแชร์ของ Android แต่อย่าโทรหา
Intent.createChooser()
หากมีแอปพลิเคชันที่ติดตั้งไว้หลายแอปที่มีตัวกรองที่ตรงกับ
ACTION_SEND
และประเภท MIME ระบบจะแสดงกล่องโต้ตอบการแยกความกำกวมที่เรียกว่าตัวแก้ไข Intent
ซึ่งช่วยให้ผู้ใช้เลือกเป้าหมายที่จะแชร์ได้ หากมีแอปพลิเคชันเดียวที่ตรงกัน ระบบจะเรียกใช้แอปพลิเคชันนั้น
ตัวอย่างวิธีใช้ตัวแก้ไข 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 Filter