... okay problem ist gelöst (fast) ...
Ich hab noch mal ein bissl herumgestöbert und ein paar Anleitungen gelesen und nun ist es klar und rennt
Folgende Erkenntnisse:
- ein BroadCastReceiver (BCR) kann keine Activity starten
- ein BCR soll nur kurze Abläufe ohne großen Speicherzugriff ausführen
- ein BroadCastReceiver kann einen Service starten
- ... aber auch ein Service, der nicht von einer Activity gestartet wurde, kann keine Activity starten
- eine Notification kann aber angezeigt werden
- eine Notification kann Aktionen auslösen
Daraus entstand folgendes Konstrukt:
- in der AndroidManifest.XML wird zusätzlich Service eingefügt
<service android:name=".BellMyPhoneService" />
- In dem BCR, der auf die eingehende SMS reagiert, wird ein neuer Intent erstellt, in diesen werden die SMS-Daten (getExtras()) reingepackt und damit der Service gestartet:
public class SMSReceiver extends BroadcastReceiver {
/**
* Event bei Empfang einer SMS den Service starten
* @param context
* @param intent
*/
@Override
public void onReceive(Context context, Intent intent) {
Intent iStartServive = new Intent(context, BellMyPhoneService.class);
iStartServive.setAction(BellMyPhoneApp.ACTION_START_SMSCASTSERVICE);
// die SMS in den StarteService-Intent legen
iStartServive.putExtras(intent.getExtras());
context.startService(iStartServive);
}
Alles anzeigen
- Im Service erfolgt die Verarbeitung der SMS und auch das Starten der Notification
In der Notification kann per Action "OKAY" ein Event gesendet werden, auf das reagiert der Service und beendet sich selbst.
Alternativ kann eine weitere SMS mit einem "StopCode" gesendet werden, auch dadurch beendet sich der Service.
Problem ist derzeit nur: Wie bekomme ich die Notification aus dem Service als "Head Up" / "Pop up" -Message (wie die Mitteilung "Neue SMS") angezeigt.
Derzeit wird die als "silent message" angezeigt:
/**
* Your Have Find Me - Dialog anzeigen
*/
private void showNotification() {
String chanelId = createNotificationChanel();
// Event für SoundPlayerStop
Intent iStopSound = new Intent();
iStopSound.setAction(BellMyPhoneApp.ACTION_FOR_STOP_SOUND_PLAYER);
PendingIntent piStopSound = PendingIntent.getBroadcast(this, 0, iStopSound, 0);
// Notification erzeugen
Intent iFullScreen = new Intent(this, BellMyPhoneService.class);
iFullScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent piFullScreen = PendingIntent.getActivity(this, 0, iFullScreen, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder nbShowDialog = new NotificationCompat.Builder(this, chanelId)
.setDefaults(NotificationCompat.DEFAULT_ALL)
.setNumber(BellMyPhoneApp.NOTIFICATION_ID)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle(getResources().getString(R.string.strvalue_app_name))
.setContentIntent(piFullScreen)
.setContentText(getResources().getString(R.string.strvalue_foundme_txt))
.addAction(0, getResources().getString(R.string.strvalue_okay_txt),piStopSound)
.setPriority(NotificationCompat.PRIORITY_HIGH)
//.setFullScreenIntent(piFullScreen, true)
.setAutoCancel(true);
if (bellSeconds > 0) {
nbShowDialog.setProgress(bellSeconds,0,false);
}
Notification nShowDialog = nbShowDialog.build();
startForeground(BellMyPhoneApp.NOTIFICATION_ID, nShowDialog);
stopForeground(false);
}
/**
* erzeugt den NotificationChannel
*/
private String createNotificationChanel(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
NotificationChannel notiChan = new NotificationChannel(
BellMyPhoneApp.CHANNEL_ID, BellMyPhoneApp.APP_NAME, NotificationManager.IMPORTANCE_HIGHT
);
notiChan.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
notiChan.enableLights(true);
notiChan.setLightColor(Color.YELLOW);
notiChan.setDescription(getResources().getString(R.string.strvalue_chanel_descript));
NotificationManager nManager = getSystemService(NotificationManager.class);
nManager.createNotificationChannel((notiChan));
return BellMyPhoneApp.CHANNEL_ID;
}
return "";
}
Alles anzeigen
Alle Versuche, mit denen im Netz gefundenen Hinweise sind fehlgeschlagen, die Notification "popt nicht auf" ...
Hab ich da was übersehen?
Gruß Mario