OnePeople Опубликовано 10 августа, 2020 Поделиться Опубликовано 10 августа, 2020 (изменено) Всем привет! Подскажите пожалуйста как это заставить работать на 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"); } } Изменено 10 августа, 2020 пользователем OnePeople Цитата Ссылка на комментарий
0 OnePeople Опубликовано 11 августа, 2020 Автор Поделиться Опубликовано 11 августа, 2020 Всё разобрался, на делфи перенёс, только как тут получить иконку уведомления? Цитата Ссылка на комментарий
0 Дмитрий Куксов Опубликовано 18 августа, 2020 Поделиться Опубликовано 18 августа, 2020 В 11.08.2020 в 22:11, OnePeople сказал: Всё разобрался, на делфи перенёс, только как тут получить иконку уведомления? Не поделитесь кодом? Delphi Can 1 Цитата Ссылка на комментарий
0 OnePeople Опубликовано 19 августа, 2020 Автор Поделиться Опубликовано 19 августа, 2020 (изменено) Вот статья с инструкцией, по созданию сервиса 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; Изменено 19 августа, 2020 пользователем OnePeople Дмитрий Куксов и Ingalime 1 1 Цитата Ссылка на комментарий
Вопрос
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Ссылка на комментарий
3 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.