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