ส่งข้อมูลอย่างง่ายไปยังแอปอื่นๆ

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 ยังมีฟีเจอร์ที่มีประโยชน์มากมายสำหรับนักพัฒนาซอฟต์แวร์ ตัวอย่างเช่น คุณสามารถ ให้ทำดังนี้

ใช้ 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/*
  • text/plain
  • text/rtf
  • text/html
  • text/json
`image/*`
  • image/jpg
  • image/png
  • image/gif
video/*
  • video/mp4
  • video/3gp
นามสกุลไฟล์ที่รองรับ 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 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 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