Я хочу запустить фоновую функцию, которая прослушивает буфер обмена, и когда копируется строка длиной более 200 символов, она выполняет функцию для отображения уведомления, а затем соответствующие Activity.class
.
Яневозможно создать службу, которая работает в фоновом режиме все время, даже когда приложение закрыто и телефон перезагружен.Сейчас я запускаю эту функцию в классе MyApp
, который расширяет Application
, поскольку я не могу понять учебник, основанный на службах, которые могут дать мне то, что я хочу.
Ниже приведен мой код для MyApp
MyApp.class
public class MyApp extends Application {
private PrefManager prefManager;
@Override
public void onCreate() {
super.onCreate();
prefManager = new PrefManager(this);
if (prefManager.isNotifOns()) {
getClipTexts();
}
}
//Listener to listen change in clipboard
private void getClipTexts() {
final ClipboardManager clipboardManager = (ClipboardManager) this.getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
try {
String textToPaste = clipboardManager.getPrimaryClip().getItemAt(0).getText().toString();
if (textToPaste.length() > 200) {
makeNotification(textToPaste);
}
} catch (Exception ignored) {
}
}
});
}
//Creating notifications after copying the clipboard text
public void makeNotification(String input) {
Intent notifIntent = new Intent(getApplicationContext(), PostActivity.class);
notifIntent.putExtra("post", input);
NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
int notificationId = 1;
String channelId = "channel-01";
String channelName = "Copy to Post";
int importance = 0;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
importance = NotificationManager.IMPORTANCE_DEFAULT;
}
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationChannel mChannel = new NotificationChannel(
channelId, channelName, importance);
notificationManager.createNotificationChannel(mChannel);
}
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext(), channelId)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Post copied content")
.setContentText(input)
.setAutoCancel(true);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(getApplicationContext());
stackBuilder.addNextIntent(notifIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);
notificationManager.notify(notificationId, mBuilder.build());
}
}
Может ли кто-нибудь написать эту функцию в сервисе, который работает вфон и поддержка во всех версиях Android.
Приведенный выше код делает то, что я хочу, пока приложение работает на переднем плане, но я хочу запустить функцию, даже когда приложение закрыто или телефон перезапускается даже в версиях Android выше Android N. Пожалуйста, дайте мнеправильный ответ, я буду благодарен за это.