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

Android ใช้ Intent และส่วนเสริมที่เกี่ยวข้องเพื่อให้ผู้ใช้แชร์ข้อมูลได้อย่างรวดเร็วและง่ายดายโดยใช้แอปโปรด

Android มี 2 วิธีให้ผู้ใช้แชร์ข้อมูลระหว่างแอป ดังนี้

  • Sharesheet ของ Android ออกแบบมาเพื่อส่งเนื้อหาไปนอกแอปและ/หรือ ให้ผู้ใช้รายอื่นโดยตรง เช่น การแชร์ URL กับเพื่อน
  • ตัวแก้ไข Intent ของ Android เหมาะสําหรับการส่งข้อมูลไปยังระยะถัดไปของงานที่กําหนดไว้อย่างดี เช่น การเปิดไฟล์ PDF จากแอปและให้ผู้ใช้เลือกโปรแกรมอ่านที่ต้องการ

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

เหตุผลที่ควรใช้ Android Sharesheet

เราขอแนะนําอย่างยิ่งให้ใช้แผงการแชร์ของ Android เพื่อสร้างความสอดคล้องให้กับผู้ใช้ในแอปต่างๆ อย่าแสดงรายการเป้าหมายการแชร์ของแอปเองหรือสร้างรูปแบบชีตการแชร์ของคุณเอง

Sharesheet ของ Android ช่วยให้ผู้ใช้แชร์ข้อมูลกับ บุคคลที่เหมาะสมด้วยคำแนะนำแอปที่เกี่ยวข้อง ด้วยการแตะเพียงครั้งเดียว ชีตการแชร์จะแนะนําเป้าหมายที่โซลูชันที่กําหนดเองใช้ไม่ได้ และใช้การจัดอันดับที่สอดคล้องกัน เนื่องจากชีตการแชร์จะพิจารณาข้อมูลเกี่ยวกับแอปและกิจกรรมของผู้ใช้ที่มีให้ระบบเท่านั้น

ชีตการแชร์ของ Android ยังมีฟีเจอร์ที่มีประโยชน์มากมายสำหรับนักพัฒนาแอปด้วย เช่น คุณจะทำสิ่งต่อไปนี้ได้

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

ใน 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 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