คลิปบอร์ดใน Android 10 ไม่ทำงานตามที่คาดไว้

ฉันได้ใช้คุณลักษณะคัดลอกจากคลิปบอร์ดแล้ว ดังนั้นเมื่อใดก็ตามที่ผู้ใช้คัดลอกบางสิ่งและแอปของฉันกลับมาทำงานต่อหลังจากนั้น ฉันจะแสดงแถบข้อมูลเพื่อดำเนินการบางอย่าง มันทำงานได้ดีใน Android 9 แต่ใน Android 10 ตามการเปลี่ยนแปลงนโยบาย จะไม่สังเกตการเปลี่ยนแปลงของคลิปบอร์ดในพื้นหลัง ไม่เป็นไร แต่เมื่อฉันเรียกใช้เมธอดต่อไปนี้ใน onResume มันไม่ได้รับข้อความใด ๆ เนื่องจาก hasPrimaryClip เป็นเท็จ แต่บนหน้าจอเดียวกันถ้าฉันใช้วิธีเดียวกันในการคลิกปุ่มใด ๆ มันก็ทำงานได้ดีและส่งกลับข้อความที่คัดลอกมา อาจเป็นคลิปบอร์ดไม่ให้สิทธิ์การเข้าถึงทันทีหลังจาก onResume และด้วยความล่าช้าเล็กน้อยเมื่อคลิกปุ่มใด ๆ ก็จะทำให้สามารถเข้าถึงได้ อะไรอาจเป็นปัญหา? ความคิดใด ๆ ที่จะได้รับการชื่นชมอย่างมาก

ขอบคุณ

public String readFromClipboard() {
        ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        if (clipboard.hasPrimaryClip()) {
            android.content.ClipDescription description = clipboard.getPrimaryClipDescription();
            android.content.ClipData data = clipboard.getPrimaryClip();
            if (data != null && description != null && description.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN))
                return String.valueOf(data.getItemAt(0).getText());
        }
        return null;
    }

person Usman Rana    schedule 29.01.2021    source แหล่งที่มา


คำตอบ (1)


สิ่งที่ฉันสังเกตเห็นคือเราสามารถเข้าถึงข้อมูลคลิปบอร์ดได้ในวิธี 'onWindowFocusChanged (boolean hasFocus)' หาก hasFocus เป็นจริง วิธีการนี้เรียกว่าประมาณ ~100ms ช้ากว่า onResume ดังนั้นการคัดลอกโดยการคลิกที่ปุ่มก็ทำงานได้ดีเพราะแอปมีโฟกัสอยู่แล้ว

person Usman Rana    schedule 29.01.2021