Запустить функцию фонового уведомления в буфере обмена, измененную даже в Android Oreo - PullRequest
1 голос
/ 14 марта 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...