Перейти к содержанию
Fire Monkey от А до Я
  • 0

NotificationListenerService


OnePeople

Вопрос

Всем привет! Подскажите пожалуйста как это заставить работать на Delphi (Rad Studio 10.3.3)

Можно класс как то из это создать?

Хоть в какую сторону копать, желательно мини пример!



import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.util.Log;
import android.support.v4.content.LocalBroadcastManager;


public class NotificationService extends NotificationListenerService {

    static final String TAG = "NotificationService";

    Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        Log.d(TAG,"Service has been started!");
    }
    @Override

    public void onNotificationPosted(StatusBarNotification sbn) {
    Log.d(TAG,"Notification Posted!");
        String pack = sbn.getPackageName();
        Bundle extras = sbn.getNotification().extras;
        String title = extras.getString("android.title");
        String text = extras.getCharSequence("android.text").toString();
        String id = sbn.getTag();

        Log.i("Package", pack);
        Log.i("Title",title);
        Log.i("Text",text);
        if (id != null){
            Log.i("Key", id);
        }
        Intent msgrcv = new Intent("Msg");
        msgrcv.putExtra("package", pack);
        msgrcv.putExtra("key", id);
        msgrcv.putExtra("title", title);
        msgrcv.putExtra("text", text);
        LocalBroadcastManager.getInstance(context).sendBroadcast(msgrcv);

    }

    @Override

    public void onNotificationRemoved(StatusBarNotification sbn) {
        Log.d(TAG,"Notification Removed");

    }
}
Изменено пользователем OnePeople
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Вот статья с инструкцией, по созданию сервиса

https://stackoverflow.com/questions/27962192/is-it-possible-to-read-the-notifications-of-other-applications-on-android-with-d

Единственное я удалил с исходника сервиса, все что связанно с 

import android.support.v4.content.LocalBroadcastManager;

и использовал обычный BroadcastReciver 

Спойлер

package com.embarcadero.ИМЯ ВАШЕГО СЕРВИСА;

import android.content.Context;
import android.content.Intent;
import android.content.BroadcastReceiver;
import android.os.Bundle;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.util.Log;


public class NotificationService extends NotificationListenerService {

    static final String TAG = "NotificationService";

    Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        Log.d(TAG,"Service has been started!");
    }
    @Override

    public void onNotificationPosted(StatusBarNotification sbn) {
    Log.d(TAG,"Notification Posted!");
        String pack = sbn.getPackageName();
        Bundle extras = sbn.getNotification().extras;
        String title = extras.getString("android.title");
        String text = extras.getCharSequence("android.text").toString();
        String id = sbn.getTag();
        Integer im = extras.getInt("android.icon");

        Log.i("Package", pack);
        Log.i("Title",title);
        Log.i("Text",text);
        if (id != null){
            Log.i("Key", id);
        }
        Intent msgrcv = new Intent("Msg");
        msgrcv.putExtra("package", pack);
    msgrcv.putExtra("status", "posted");
        msgrcv.putExtra("key", id);
        msgrcv.putExtra("title", title);
        msgrcv.putExtra("text", text);
    msgrcv.putExtra("icon", im.toString());
        sendBroadcast(msgrcv);

    }

    @Override

    public void onNotificationRemoved(StatusBarNotification sbn) {
        Log.d(TAG,"Notification Removed");
    String pack = sbn.getPackageName();
        Intent msgrcv = new Intent("Msg");
        msgrcv.putExtra("package", pack);
    msgrcv.putExtra("status", "removed");
        sendBroadcast(msgrcv);
    }
}

Далее даем разрешение

BIND NOTIFICATION LISTENER SERVICE

В манифесте после строки  <%services%> дописываем

 <service android:name="com.embarcadero.ИМЯ ВАШЕГО СЕРВИСА.NotificationService"
      android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
     <intent-filter>
         <action android:name="android.service.notification.NotificationListenerService" />
     </intent-filter>
 </service>

Иконку доставать так

              iconapp:=TBitmap.Create;
              Surface := TBitmapSurface.Create;    
              NotifyDraw:=TAndroidHelper.Context.createPackageContext(stpackage, 0).getResources.getDrawableForDensity(idicon, 480);
                if StrToInt(NotifyDraw.getAlpha.ToString)=255 then
                    Bitmap := TJBitmapDrawable.Wrap((NotifyDraw.getCurrent as ILocalObject).GetObjectID).getBitmap;
                if Bitmap<>nil then
                    begin
                      JBitmapToSurface(Bitmap, Surface);
                      iconapp.Assign(Surface);
                    end;

 

Изменено пользователем OnePeople
Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...