Запуск функции фонового уведомления в буфере обмена изменен даже в Android Oreo

#java #android #service

#java #Android #Обслуживание

Вопрос:

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

Комментарии:

1. У вас есть какое-либо решение для этого? А как насчет постоянно работающего уведомления?