Я пытаюсь распечатать скопированный текст у пользователя. Всякий раз, когда пользователь скопировал какой-либо текст, когда мое приложение закрыто, я хочу напечатать его как Журнал или тост, используя фоновую службу .
Но, как показано в примере ниже, я получаю скопированное Текст только тогда, когда приложение работает, и текст скопирован из моего 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
Пожалуйста, помогите мне запустить службу буфера обмена в фон, когда приложение закрыто.