Почему буфер обмена не прослушивается в фоновом режиме? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь распечатать скопированный текст у пользователя. Всякий раз, когда пользователь скопировал какой-либо текст, когда мое приложение закрыто, я хочу напечатать его как Журнал или тост, используя фоновую службу .

Но, как показано в примере ниже, я получаю скопированное Текст только тогда, когда приложение работает, и текст скопирован из моего Edittext. Как распечатать скопированный текст, когда приложение закрыто?

Ниже я написал очень простой код для запуска службы.

public class Main extends AppCompatActivity {

    Intent intent;
    Button start, stop;
    EditText textEdt;
    String getData;
    ClipData clipData;
    ClipData.Item item;
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        start =(Button)findViewById(R.id.store);
        stop =(Button)findViewById(R.id.retrieve);
        textEdt=(EditText)findViewById(R.id.getTextEdt);

        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                intent=new Intent(Main.this,ClipService.class);
                startService(intent);
            }
        });
        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                intent=new Intent(Main.this,ClipService.class);
                stopService(intent);
            }
        });
    }
}

Ниже приведен мой справочный код службы. Работает нормально, когда приложение открывается и копируется из текста редактирования.

package com.example.app_testing;

import android.app.Service;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

import androidx.annotation.Nullable;

public class ClipService extends Service implements ClipboardManager.OnPrimaryClipChangedListener {
    ClipboardManager clipboardManager;
    ClipData.Item item;
    ClipData clipData;
    public IBinder onBind(Intent intent) {
        return null;
    }
    public void onCreate() {
        clipboardManager= (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
        clipboardManager.addPrimaryClipChangedListener(this);
        Log.i("app","service created");
        //Toast.makeText(getApplication(),"Service created",Toast.LENGTH_SHORT).show();
    }

    public int onStartCommand(final Intent intent, int flags, int startId) {
        Log.i("app","service started");
        return START_STICKY;
    }

    public void onDestroy() {
        Log.i("app","service destroyed");
        //Toast.makeText(getApplication(),"Service Destroyed",Toast.LENGTH_SHORT).show();
    }

    public void onPrimaryClipChanged() {
        try {
            clipData=clipboardManager.getPrimaryClip();
            item=clipData.getItemAt(0);
            Log.i("app","copied text: "+item.getText().toString());
        } catch (Exception e) {
            Log.e("app","error onPrimaryClipChanged: "+e.getMessage());
        }
    }
}

Мой сервис регистрации в Манифесте.

<service android:name=".ClipService" android:exported="false"/>

Моя программная среда:

  • Windows 10 Home
  • Android Studio 3.6.1
  • Target SDK 28 Минимум 23

Пожалуйста, помогите мне запустить службу буфера обмена в фон, когда приложение закрыто.

...