Как получить доступ к данным буфера обмена программно в Android Q (10)? - PullRequest
3 голосов
/ 24 января 2020

Как мы знаем, считывание данных с помощью Clipboard Manager в фоновом режиме было остановлено Google в android Q, поэтому мне все равно нужно вставлять данные, скопированные непосредственно в текст редактирования, когда пользователь возвращается к действиям без добавления пользователя, вставки и без вставки кнопка.

Проблема в том, что при попытке прочитать данные с помощью getPrimaryClip() возвращается null.

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_copy_and_paste);

           ed_editText = findViewById(R.id.ed_editText);

    }
    @Override
    protected void onResume() {
        super.onResume();
           getCopy()
        }

    private void getCopy() {
        ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
                if (clipboard != null && clipboard.hasPrimaryClip() && clipboard.getPrimaryClip() != null) {
                    CharSequence clip = clipboard.getPrimaryClip().getItemAt(0).coerceToText(CopyAndPasteActivity.this).toString();
                        ed_editText.setText(clip.toString());
                }      

    }

XML

      <EditText
                        android:id="@+id/ed_editText"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_marginLeft="24dp"
                        android:layout_marginStart="24dp"
                        android:maxLines="1"
                        android:lines="1"
                        android:focusable="true"
                        android:textSize="14sp"
                        android:inputType="text"
                        android:focusableInTouchMode="true"
                        android:layout_weight="1"
                        android:background="@null" >
                    <requestFocus />
                    </EditText>

1 Ответ

5 голосов
/ 25 января 2020

Вы должны получить доступ к буферу обмена в Window.Callback.onWindowFocusChanged(true), так как это момент, когда вы получаете фокус ввода, который требуется для чтения буфера обмена в Android 10 (Q). У вас еще не обязательно фокус ввода в onResume.

...