Android ใช้ Intent และส่วนเสริมที่เกี่ยวข้องเพื่อให้ผู้ใช้แชร์ข้อมูลได้อย่างรวดเร็วและง่ายดายโดยใช้แอปโปรด
Android มี 2 วิธีให้ผู้ใช้แชร์ข้อมูลระหว่างแอป ดังนี้
- Sharesheet ของ Android ออกแบบมาเพื่อส่งเนื้อหาไปนอกแอปและ/หรือ ให้ผู้ใช้รายอื่นโดยตรง เช่น การแชร์ URL กับเพื่อน
- ตัวแก้ไข Intent ของ Android เหมาะสําหรับการส่งข้อมูลไปยังระยะถัดไปของงานที่กําหนดไว้อย่างดี เช่น การเปิดไฟล์ PDF จากแอปและให้ผู้ใช้เลือกโปรแกรมอ่านที่ต้องการ
เมื่อสร้าง Intent คุณจะระบุการดำเนินการที่ต้องการให้ Intent ดำเนินการ
Android ใช้การดำเนินการ ACTION_SEND
เพื่อส่งข้อมูลจากกิจกรรมหนึ่งไปยังอีกกิจกรรมหนึ่ง แม้ข้ามขอบเขตกระบวนการก็ตาม คุณต้องระบุข้อมูลและประเภทของข้อมูล ระบบจะระบุกิจกรรมที่เข้ากันได้โดยอัตโนมัติซึ่งสามารถรับข้อมูลและแสดงต่อผู้ใช้ ในกรณีของโปรแกรมแก้ไข Intent หากมีเพียงกิจกรรมเดียวที่จัดการ Intent ได้ กิจกรรมนั้นจะเริ่มต้นทันที
เหตุผลที่ควรใช้ Android Sharesheet
เราขอแนะนําอย่างยิ่งให้ใช้แผงการแชร์ของ Android เพื่อสร้างความสอดคล้องให้กับผู้ใช้ในแอปต่างๆ อย่าแสดงรายการเป้าหมายการแชร์ของแอปเองหรือสร้างรูปแบบชีตการแชร์ของคุณเอง
Sharesheet ของ Android ช่วยให้ผู้ใช้แชร์ข้อมูลกับ บุคคลที่เหมาะสมด้วยคำแนะนำแอปที่เกี่ยวข้อง ด้วยการแตะเพียงครั้งเดียว ชีตการแชร์จะแนะนําเป้าหมายที่โซลูชันที่กําหนดเองใช้ไม่ได้ และใช้การจัดอันดับที่สอดคล้องกัน เนื่องจากชีตการแชร์จะพิจารณาข้อมูลเกี่ยวกับแอปและกิจกรรมของผู้ใช้ที่มีให้ระบบเท่านั้น
ชีตการแชร์ของ Android ยังมีฟีเจอร์ที่มีประโยชน์มากมายสำหรับนักพัฒนาแอปด้วย เช่น คุณจะทำสิ่งต่อไปนี้ได้
- ดูว่าผู้ใช้แชร์เสร็จสมบูรณ์เมื่อใดและแชร์ไปยังที่ใด
- เพิ่ม
ChooserTarget
และเป้าหมายแอปที่กําหนดเอง - แสดงตัวอย่างเนื้อหาแบบ Rich Text โดยเริ่มจาก Android 10 (API ระดับ 29)
- ยกเว้นเป้าหมายที่ตรงกับชื่อคอมโพเนนต์ที่เฉพาะเจาะจง
ใช้ Android Sharesheet
สําหรับการแชร์ทุกประเภท ให้สร้าง Intent และตั้งค่าการดําเนินการเป็น
Intent.ACTION_SEND
หากต้องการแสดง Sharesheet ของ Android ให้เรียก Intent.createChooser()
และส่งออบเจ็กต์ Intent
ของคุณไปให้
ซึ่งจะแสดง Intent เวอร์ชันที่แสดงหน้าจอการแชร์ของ Android เสมอ
ส่งเนื้อหาข้อความ
การใช้งานที่ตรงไปตรงมาและพบได้บ่อยที่สุดของ Sharesheet ใน 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[])
เพื่อเพิ่มรายการเหล่านี้ลงใน 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 อย่างเป็นทางการของ IANA
ชีตการแชร์ของ 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) Android Sharesheet ของ Android จะแสดงตัวอย่างของข้อความที่แชร์ ในบางกรณี ข้อความที่แชร์อาจเข้าใจยาก ลองแชร์ URL ที่ยุ่งยาก เช่น https://www.google.com/search?ei=2rRVXcLkJajM0PEPoLy7oA4
ตัวอย่างเพลงที่สมบูรณ์ยิ่งขึ้นจะช่วยให้ผู้ใช้มั่นใจได้ว่าสิ่งที่แชร์คืออะไร
หากแสดงตัวอย่างข้อความ คุณจะตั้งชื่อ รูปภาพขนาดย่อ หรือทั้ง 2 อย่างก็ได้ เพิ่มคำอธิบายลงใน Intent.EXTRA_TITLE
ก่อนเรียก Intent.createChooser()
และเพิ่มภาพขนาดย่อที่เกี่ยวข้องโดยใช้ ClipData
หมายเหตุ: URI ของเนื้อหารูปภาพมาจาก FileProvider
ซึ่งโดยปกติแล้วมาจาก <cache-path>
ที่กำหนดค่าไว้
ดูข้อมูลเพิ่มเติมได้ที่การแชร์ไฟล์ อย่าลืมให้สิทธิ์ที่เหมาะสมแก่ Google ไดรฟ์ในการอ่านรูปภาพที่ต้องการใช้เป็นภาพปก ดูข้อมูลเพิ่มเติมได้ที่ 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 14 (API ระดับ 34) ขึ้นไป แอปจะเพิ่มการดำเนินการที่กำหนดเองลงใน Sharesheet ของ Android ได้
การดําเนินการที่กำหนดเองจะแสดงเป็นไอคอนการดำเนินการเล็กๆ ที่ด้านบนของหน้าจอการแชร์ของ Android และแอปสามารถระบุ Intent
ใดก็ได้เป็นการดำเนินการที่เรียกให้แสดงเมื่อมีการคลิกไอคอน
หากต้องการเพิ่มการดำเนินการที่กำหนดเองในหน้าจอการแชร์ของ Android ก่อนอื่นให้สร้าง ChooserAction
with
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 ให้คุณระบุออบเจ็กต์ ChooserTarget
ได้สูงสุด 2 รายการที่จะแสดงก่อนโหลดทางลัดการแชร์และเป้าหมายเครื่องมือเลือกจาก ChooserTargetServices
นอกจากนี้ คุณยังระบุ 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 หลังจากเรียกใช้ 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 Sharesheet จะช่วยให้คุณได้รับข้อมูลนี้โดยการระบุ 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 ของ 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