เพิ่มวิดีโอโดยใช้การแสดงภาพซ้อนภาพ (PIP)

เริ่มตั้งแต่ Android 8.0 (API ระดับ 26) เป็นต้นไป Android จะอนุญาตให้เปิดกิจกรรมใน โหมดการแสดงภาพซ้อนภาพ (PIP) PIP คือโหมดหลายหน้าต่างชนิดพิเศษซึ่งส่วนใหญ่ ที่ใช้สำหรับการเล่นวิดีโอ ช่วยให้ผู้ใช้ดูวิดีโอในหน้าต่างขนาดเล็กที่ปักหมุดไว้ได้ ที่มุมของหน้าจอขณะไปยังแอปต่างๆ หรือเรียกดูเนื้อหาบน หน้าจอหลัก

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

หน้าต่าง PIP จะปรากฏขึ้นในเลเยอร์บนสุดของหน้าจอ ในมุมที่เลือกโดย ระบบ

PIP ยังใช้งานได้ในอุปกรณ์ Android TV OS ที่เข้ากันได้ซึ่งใช้ Android 14 (API ระดับ 34) ขึ้นไป แม้ว่าจะมีความคล้ายคลึงกันมากมาย แต่ก็มี ข้อพิจารณาเพิ่มเติมเมื่อใช้ PIP บนทีวี

วิธีที่ผู้ใช้โต้ตอบกับหน้าต่าง PIP

ผู้ใช้ลากหน้าต่าง PIP ไปยังตำแหน่งอื่นได้ ตั้งแต่ Android 12 เป็นต้นไป ผู้ใช้ และดำเนินการต่อไปนี้ได้ด้วย

  • แตะครั้งเดียวที่หน้าต่างเพื่อแสดงการเปิด/ปิดโหมดเต็มหน้าจอ ปุ่มปิด ปุ่มการตั้งค่าและการดำเนินการที่กำหนดเองซึ่งแอปของคุณสร้างขึ้น (เช่น เล่น )

  • แตะสองครั้งที่หน้าต่างเพื่อสลับระหว่างขนาด PIP ปัจจุบันและขนาดสูงสุด หรือขนาด PIP ขั้นต่ำ เช่น การแตะสองครั้งที่หน้าต่างที่ขยายใหญ่สุด ย่อขนาดลง และผลสนทนาก็เป็นจริงเช่นกัน

  • ซ่อนหน้าต่างไว้โดยลากไปที่ขอบด้านซ้ายหรือขวา วิธียกเลิกการซ่อน ให้แตะส่วนที่มองเห็นได้ของหน้าต่างที่ซ่อน หรือลากออก

  • ปรับขนาดหน้าต่าง PIP โดยใช้การบีบเพื่อซูม

แอปของคุณจะควบคุมเมื่อกิจกรรมปัจจุบันเข้าสู่โหมด PIP นี่คือบางส่วน ตัวอย่าง:

  • กิจกรรมจะเข้าสู่โหมด PIP ได้เมื่อผู้ใช้แตะปุ่มหน้าแรกหรือปัด จนถึงบ้าน นี่เป็นวิธีที่ Google Maps จะแสดงเส้นทางต่อไปในขณะที่ ผู้ใช้ทำกิจกรรมอื่นไปด้วย

  • แอปของคุณสามารถย้ายวิดีโอเข้าสู่โหมด PIP เมื่อผู้ใช้ย้อนกลับจาก ดูวิดีโอเพื่อเรียกดูเนื้อหาอื่น

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

  • แอปของคุณสามารถช่วยให้ผู้ใช้จัดคิวเนื้อหาเพิ่มเติม พวกเขาดูวิดีโอ วิดีโอจะเล่นต่อในโหมด PIP โดยที่ หน้าจอจะแสดงกิจกรรมการเลือกเนื้อหา

ประกาศการรองรับ PIP

โดยค่าเริ่มต้น ระบบจะไม่รองรับ PIP สำหรับแอปโดยอัตโนมัติ หากคุณต้องการ รองรับ PIP ในแอป ลงทะเบียนกิจกรรมวิดีโอในไฟล์ Manifest โดย กำลังตั้งค่า android:supportsPictureInPicture เป็น true นอกจากนี้ ให้ระบุ กิจกรรมจะจัดการการเปลี่ยนแปลงการกำหนดค่าเลย์เอาต์เพื่อให้กิจกรรมของคุณไม่ เปิดขึ้นอีกครั้งเมื่อเลย์เอาต์เกิดขึ้นในระหว่างการเปลี่ยนโหมด PIP

<activity android:name="VideoActivity"
    android:supportsPictureInPicture="true"
    android:configChanges=
        "screenSize|smallestScreenSize|screenLayout|orientation"
    ...

เปลี่ยนกิจกรรมเป็น PIP

ใน Android 12 เป็นต้นไป คุณสามารถเปลี่ยนกิจกรรมเป็นโหมด PIP ได้โดยการตั้งค่า ธง setAutoEnterEnabled เป็น true เมื่อใช้การตั้งค่านี้ กิจกรรม เปลี่ยนเป็นโหมด PIP โดยอัตโนมัติตามที่จำเป็นโดยไม่ต้องเรียกใช้อย่างชัดเจน enterPictureInPictureMode() ใน onUserLeaveHint และนี่คือ ข้อดีอีกประการคือช่วยให้การเปลี่ยนราบรื่นขึ้น โปรดดูรายละเอียดที่หัวข้อสร้าง เปลี่ยนเป็นโหมด PIP ได้อย่างราบรื่นขึ้นจากการนำทางด้วยท่าทางสัมผัส

หากคุณกําหนดเป้าหมายเป็น Android 11 หรือต่ำกว่า กิจกรรมจะต้องเรียกใช้ enterPictureInPictureMode() เพื่อเปลี่ยนเป็นโหมด PIP ตัวอย่างเช่น โค้ดต่อไปนี้จะเปลี่ยนกิจกรรมเป็น โหมด PIP เมื่อผู้ใช้คลิกปุ่มเฉพาะใน UI ของแอป

Kotlin

override fun onActionClicked(action: Action) {
    if (action.id.toInt() == R.id.lb_control_picture_in_picture) {
        activity?.enterPictureInPictureMode()
        return
    }
}

Java

@Override
public void onActionClicked(Action action) {
    if (action.getId() == R.id.lb_control_picture_in_picture) {
        getActivity().enterPictureInPictureMode();
        return;
    }
    ...
}

คุณอาจต้องการรวมตรรกะที่เปลี่ยนกิจกรรมเป็นโหมด PIP แทน ในการก้าวเข้าสู่พื้นหลัง ตัวอย่างเช่น Google Maps จะเปลี่ยนเป็นโหมด PIP หาก ผู้ใช้กดปุ่มหน้าแรกหรือปุ่มล่าสุดขณะแอปนำทาง คุณสามารถ ตรวจจับกรณีนี้โดยการลบล้าง onUserLeaveHint():

Kotlin

override fun onUserLeaveHint() {
    if (iWantToBeInPipModeNow()) {
        enterPictureInPictureMode()
    }
}

Java

@Override
public void onUserLeaveHint () {
    if (iWantToBeInPipModeNow()) {
        enterPictureInPictureMode();
    }
}

แนะนำ: มอบประสบการณ์การเปลี่ยน PIP ที่สมบูรณ์แบบให้แก่ผู้ใช้

Android 12 เพิ่มการปรับปรุงรูปลักษณ์ภายนอกให้กับการเปลี่ยนแบบภาพเคลื่อนไหวได้อย่างมาก ระหว่างหน้าต่างเต็มหน้าจอและ PIP เราขอแนะนำอย่างยิ่งให้คุณปรับใช้ การเปลี่ยนแปลงที่เกี่ยวข้อง เมื่อดำเนินการแล้ว การเปลี่ยนแปลงเหล่านี้จะปรับขนาดโดยอัตโนมัติเป็น หน้าจอขนาดใหญ่ เช่น อุปกรณ์แบบพับได้และแท็บเล็ตโดยที่คุณไม่ต้องดำเนินการใดๆ เพิ่มเติม

หากแอปไม่มีการอัปเดตที่เกี่ยวข้อง การเปลี่ยน PIP จะยังคง ใช้งานได้ แต่ภาพเคลื่อนไหวไม่ค่อยเรียบร้อย ตัวอย่างเช่น การเปลี่ยน จากโหมดเต็มหน้าจอเป็นโหมด PIP อาจทำให้หน้าต่าง PIP หายไปในระหว่าง ก่อนที่จะปรากฏอีกครั้งเมื่อการเปลี่ยนเสร็จสมบูรณ์

การเปลี่ยนแปลงเหล่านี้เกี่ยวข้องกับสิ่งต่อไปนี้

  • การเปลี่ยนไปใช้โหมด PIP ราบรื่นยิ่งขึ้นจากการนำทางด้วยท่าทางสัมผัส
  • การตั้งค่า sourceRectHint ที่เหมาะสมสำหรับการเข้าและออกจากโหมด PIP
  • การปิดใช้การปรับขนาดเนื้อหาที่ไม่ใช่วิดีโออย่างราบรื่น

โปรดดู Android ตัวอย่าง Kotlin PictureInPicture เป็นข้อมูลอ้างอิงที่ช่วยให้ได้รับประสบการณ์การเปลี่ยนที่ราบรื่น

เปลี่ยนเป็นโหมด PIP ได้อย่างราบรื่นยิ่งขึ้นจากการนำทางด้วยท่าทางสัมผัส

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

ทำตามขั้นตอนต่อไปนี้เพื่อทำการเปลี่ยนแปลงและดูตัวอย่างนี้สำหรับ การอ้างอิง:

  1. ใช้ setAutoEnterEnabled เพื่อสร้าง PictureInPictureParams.Builder:

    Kotlin

    setPictureInPictureParams(PictureInPictureParams.Builder()
        .setAspectRatio(aspectRatio)
        .setSourceRectHint(sourceRectHint)
        .setAutoEnterEnabled(true)
        .build())
    

    Java

    setPictureInPictureParams(new PictureInPictureParams.Builder()
        .setAspectRatio(aspectRatio)
        .setSourceRectHint(sourceRectHint)
        .setAutoEnterEnabled(true)
        .build());
    
  2. โทรติดต่อ setPictureInPictureParams เพื่อรับข้อมูลล่าสุด ก่อนเวลา PictureInPictureParams แอปไม่ต้องรอให้ onUserLeaveHint Callback (อย่างที่ควรจะเป็นใน Android 11)

    ตัวอย่างเช่น คุณอาจต้องการโทรหา setPictureInPictureParams ใน เล่นครั้งแรกและการเล่นต่อไปนี้ หากสัดส่วนการแสดงผลมีการเปลี่ยนแปลง

  3. โทรหา setAutoEnterEnabled(false) แต่เมื่อจำเป็นเท่านั้น ตัวอย่างเช่น คุณอาจไม่ต้องการป้อน PIP หากการเล่นปัจจุบันอยู่ในโหมดหยุดชั่วคราว

ตั้งค่า sourceRectHint ที่เหมาะสมสำหรับการเข้าและออกจากโหมด PIP

เริ่มต้นด้วยการเปิดตัว PIP ใน Android 8.0 setSourceRectHint ระบุขอบเขตของกิจกรรมที่มองเห็นได้หลังจากการเปลี่ยนเข้าสู่ การแสดงภาพซ้อนภาพ เช่น ขอบเขตการดูวิดีโอในวิดีโอเพลเยอร์

เมื่อใช้ Android 12 ระบบจะใช้ sourceRectHint เพื่อให้ติดตั้งใช้งานได้อย่างราบรื่นขึ้นมาก ภาพเคลื่อนไหวทั้งเมื่อเข้าและออกจากโหมด PIP

หากต้องการตั้งค่า sourceRectHint ให้เข้าและออกจากโหมด PIP อย่างถูกต้อง ให้ทำดังนี้

  1. สร้าง PictureInPictureParams โดยใช้ขอบเขตที่เหมาะสมเป็น sourceRectHint เราขอแนะนำให้แนบไฟล์ ตัวฟังการเปลี่ยนเลย์เอาต์ของโปรแกรมเล่นวิดีโอ:

    Kotlin

    val mOnLayoutChangeListener =
    OnLayoutChangeListener { v: View?, oldLeft: Int,
            oldTop: Int, oldRight: Int, oldBottom: Int, newLeft: Int, newTop:
            Int, newRight: Int, newBottom: Int ->
        val sourceRectHint = Rect()
        mYourVideoView.getGlobalVisibleRect(sourceRectHint)
        val builder = PictureInPictureParams.Builder()
            .setSourceRectHint(sourceRectHint)
        setPictureInPictureParams(builder.build())
    }
    
    mYourVideoView.addOnLayoutChangeListener(mOnLayoutChangeListener)
    

    Java

    private final View.OnLayoutChangeListener mOnLayoutChangeListener =
            (v, oldLeft, oldTop, oldRight, oldBottom, newLeft, newTop, newRight,
            newBottom) -> {
        final Rect sourceRectHint = new Rect();
        mYourVideoView.getGlobalVisibleRect(sourceRectHint);
        final PictureInPictureParams.Builder builder =
            new PictureInPictureParams.Builder()
                .setSourceRectHint(sourceRectHint);
        setPictureInPictureParams(builder.build());
    };
    
    mYourVideoView.addOnLayoutChangeListener(mOnLayoutChangeListener);
    
  2. หากจำเป็น ให้อัปเดต sourceRectHint ก่อนที่ระบบจะเริ่มทำงาน ออกจากการเปลี่ยน เมื่อระบบกำลังจะออกจากโหมด PIP กิจกรรม ลำดับชั้นการแสดงผลจะวางตามการกำหนดค่าปลายทาง (เช่น เต็มหน้าจอ) แอปสามารถแนบ Listener การเปลี่ยนเลย์เอาต์เข้ากับมุมมองรูทได้ หรือมุมมองเป้าหมาย (เช่น มุมมองโปรแกรมเล่นวิดีโอ) เพื่อตรวจหาเหตุการณ์และ อัปเดต sourceRectHint ก่อนที่ภาพเคลื่อนไหวจะเริ่มเล่น

    Kotlin

    // Listener is called immediately after the user exits PiP but before animating.
    playerView.addOnLayoutChangeListener { _, left, top, right, bottom,
                        oldLeft, oldTop, oldRight, oldBottom ->
        if (left != oldLeft
            || right != oldRight
            || top != oldTop
            || bottom != oldBottom) {
            // The playerView's bounds changed, update the source hint rect to
            // reflect its new bounds.
            val sourceRectHint = Rect()
            playerView.getGlobalVisibleRect(sourceRectHint)
            setPictureInPictureParams(
                PictureInPictureParams.Builder()
                    .setSourceRectHint(sourceRectHint)
                    .build()
            )
        }
    }
    
    

    Java

    // Listener is called right after the user exits PiP but before
    // animating.
    playerView.addOnLayoutChangeListener((v, left, top, right, bottom,
                        oldLeft, oldTop, oldRight, oldBottom) -> {
        if (left != oldLeft
            || right != oldRight
            || top != oldTop
            || bottom != oldBottom) {
            // The playerView's bounds changed, update the source hint rect to
            // reflect its new bounds.
            final Rect sourceRectHint = new Rect();
            playerView.getGlobalVisibleRect(sourceRectHint);
            setPictureInPictureParams(
                new PictureInPictureParams.Builder()
                    .setSourceRectHint(sourceRectHint)
                    .build());
        }
    });
    
    

ปิดใช้การปรับขนาดเนื้อหาที่ไม่ใช่วิดีโออย่างราบรื่น

Android 12 เพิ่ม Flag setSeamlessResizeEnabled ซึ่งมี ภาพเคลื่อนไหวแบบครอสเฟดราบรื่นยิ่งขึ้นเมื่อปรับขนาดเนื้อหาที่ไม่ใช่วิดีโอใน PIP ก่อนหน้านี้ การปรับขนาดเนื้อหาที่ไม่ใช่วิดีโอในหน้าต่าง PIP สามารถสร้าง ที่น่าตกใจ

หากต้องการปิดใช้การปรับขนาดเนื้อหาที่ไม่ใช่วิดีโออย่างราบรื่น ให้ทำดังนี้

Kotlin

setPictureInPictureParams(PictureInPictureParams.Builder()
    .setSeamlessResizeEnabled(false)
    .build())

Java

setPictureInPictureParams(new PictureInPictureParams.Builder()
    .setSeamlessResizeEnabled(false)
    .build());

จัดการ UI ระหว่าง PIP

เมื่อกิจกรรมเข้าหรือออกจากโหมด PIP ระบบจะเรียกใช้ Activity.onPictureInPictureModeChanged() หรือ Fragment.onPictureInPictureModeChanged()

คุณควรลบล้าง Callback เหล่านี้เพื่อวาดองค์ประกอบ UI ของกิจกรรมอีกครั้ง เก็บ โปรดทราบว่าในโหมด PIP กิจกรรมจะแสดงในหน้าต่างขนาดเล็ก ผู้ใช้ไม่สามารถ โต้ตอบกับองค์ประกอบ UI ของแอปเมื่ออยู่ในโหมด PIP และรายละเอียดของ องค์ประกอบ UI ขนาดเล็กอาจมองเห็นได้ยาก กิจกรรมการเล่นวิดีโอกับ UI ขนาดเล็กให้ประสบการณ์ของผู้ใช้ที่ดีที่สุด

หากแอปของคุณต้องมีการดำเนินการที่กำหนดเองสำหรับ PIP โปรดดูเพิ่ม ในหน้านี้ นำองค์ประกอบ UI อื่นๆ ออกก่อน กิจกรรมจะเข้าสู่ PIP และคืนค่าข้อมูลเมื่อกิจกรรมของคุณกลายเป็นแบบเต็มหน้าจอ อีกครั้ง:

Kotlin

override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean,
                                           newConfig: Configuration) {
    if (isInPictureInPictureMode) {
        // Hide the full-screen UI (controls, etc.) while in PiP mode.
    } else {
        // Restore the full-screen UI.
    }
}

Java

@Override
public void onPictureInPictureModeChanged (boolean isInPictureInPictureMode, Configuration newConfig) {
    if (isInPictureInPictureMode) {
        // Hide the full-screen UI (controls, etc.) while in PiP mode.
    } else {
        // Restore the full-screen UI.
        ...
    }
}

เพิ่มตัวควบคุม

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

หากแอปมีสื่อที่ใช้งานอยู่ เซสชัน จากนั้นเล่น หยุดชั่วคราว ถัดไป และก่อนหน้า จะปรากฏขึ้น

คุณยังสามารถระบุการทำงานที่กำหนดเองโดยชัดแจ้งได้ด้วยการสร้าง PictureInPictureParams กับ PictureInPictureParams.Builder.setActions() ก่อนเข้าสู่โหมด PIP และส่งพารามิเตอร์เมื่อคุณเข้าสู่โหมด PIP โดยใช้ enterPictureInPictureMode(android.app.PictureInPictureParams) หรือ setPictureInPictureParams(android.app.PictureInPictureParams) โปรดระมัดระวัง หากคุณพยายามเพิ่มจำนวน getMaxNumPictureInPictureActions() ก็จะแสดงเพียงจำนวนสูงสุดเท่านั้น

เล่นวิดีโอต่อขณะที่อยู่ใน PIP

เมื่อกิจกรรมของคุณเปลี่ยนเป็น PIP ระบบจะวางกิจกรรมไว้ในช่วง "หยุดชั่วคราว" และเรียกใช้ onPause() วิดีโอ ไม่ควรหยุดเล่นชั่วคราวและเล่นต่อไปแทนหากกิจกรรมนั้น หยุดชั่วคราวขณะเปลี่ยนเป็นโหมด PIP

ใน Android 7.0 ขึ้นไป คุณควรหยุดวิดีโอชั่วคราวและเล่นวิดีโอต่อเมื่อ ระบบจะเรียกใช้ onStop() และ onStart() วิธีการนี้ เพื่อให้ไม่ต้องตรวจสอบว่าแอปอยู่ในโหมด PIP ใน onPause() หรือไม่ และ เล่นต่ออย่างชัดเจน

หากยังไม่ได้ตั้งค่าแฟล็ก setAutoEnterEnabled เป็น true และคุณจะต้องทำดังนี้ หยุดการเล่นชั่วคราวในการใช้งาน onPause() ตรวจสอบโหมด PIP โดยการเรียกใช้ isInPictureInPictureMode()และจัดการการเล่นอย่างเหมาะสม เช่น

Kotlin

override fun onPause() {
    super.onPause()
    // If called while in PiP mode, do not pause playback
    if (isInPictureInPictureMode) {
        // Continue playback
    } else {
        // Use existing playback logic for paused Activity behavior.
    }
}

Java

@Override
public void onPause() {
    // If called while in PiP mode, do not pause playback
    if (isInPictureInPictureMode()) {
        // Continue playback
        ...
    } else {
        // Use existing playback logic for paused Activity behavior.
        ...
    }
}

เมื่อกิจกรรมของคุณออกจากโหมด PIP กลับไปเป็นโหมดเต็มหน้าจอ ระบบจะ ดำเนินกิจกรรมต่อและเรียก onResume()

ใช้กิจกรรมการเล่นรายการเดียวสำหรับ PIP

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

เพื่อให้แน่ใจว่ามีการใช้กิจกรรมเดียวสำหรับคำขอเล่นวิดีโอและสลับ เข้าหรือออกจากโหมด PIP ตามความจำเป็น ให้ตั้งค่า android:launchMode ของกิจกรรมเป็น singleTask ในไฟล์ Manifest ของคุณ:

<activity android:name="VideoActivity"
    ...
    android:supportsPictureInPicture="true"
    android:launchMode="singleTask"
    ...

ในกิจกรรม ให้ลบล้าง onNewIntent() และจัดการวิดีโอใหม่ รวมถึงหยุดเล่นวิดีโอที่มีอยู่ หากจำเป็น

แนวทางปฏิบัติแนะนำ

PIP อาจถูกปิดใช้ในอุปกรณ์ที่มี RAM ต่ำ ก่อนที่แอปจะใช้ PIP ตรวจสอบว่าพร้อมให้บริการด้วยการโทร hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)

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

เมื่อกิจกรรมอยู่ในโหมด PIP กิจกรรมจะไม่โฟกัสอินพุตโดยค่าเริ่มต้น ถึง รับเหตุการณ์การป้อนข้อมูลขณะอยู่ในโหมด PIP ให้ใช้ MediaSession.setCallback() ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ setCallback() ได้ที่แสดง "กำลังเล่น" การ์ด

เมื่อแอปอยู่ในโหมด PIP การเล่นวิดีโอในหน้าต่าง PIP อาจทำให้เกิดเสียง การรบกวนแอปอื่น เช่น แอปโปรแกรมเล่นเพลงหรือแอปค้นหาด้วยเสียง เพื่อหลีกเลี่ยงปัญหานี้ ให้ขอโฟกัสเสียงเมื่อคุณเริ่มเล่นวิดีโอและแฮนเดิล การแจ้งเตือนการเปลี่ยนแปลงโฟกัสเสียง ตามที่อธิบายไว้ใน การจัดการเสียง โฟกัส หากคุณได้รับการแจ้งเตือน ของการสูญเสียโฟกัสของเสียงเมื่ออยู่ในโหมด PIP ให้หยุดเล่นวิดีโอชั่วคราวหรือหยุดเล่นวิดีโอ

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

โค้ดตัวอย่างเพิ่มเติม

หากต้องการดาวน์โหลดแอปตัวอย่างที่เขียนด้วย Kotlin โปรดดูตัวอย่าง Android PictureInPicture (Kotlin)