Ich habe meinen Kopf gegen den Tisch mit diesem Problem seit 3 Tagen geschlagen, bitte sagen Sie mir, wo ich mich verirrt habe.Full Screen Notification nur als Heads Up
Wenn ich einen eingehenden VoIP-Anruf erhalte, versuche ich eine Vollbildbenachrichtigung zu zeigen, genau wie die PhoneApp. Mir geht es gut mit Heads-up, wenn der Benutzer in einer immersiven Aktivität ist. Allerdings erhalte ich nur eine Benachrichtigung über den Kopf und bekomme nie einen ganzen Bildschirm. Ich brauche eine Benachrichtigung, um den Sperrbildschirm ebenfalls zu ignorieren. Hier
ist, was ich tue:
String callJson = call.toJson(uber).toString();
uber.requestWakeState(UberVoice.WAKE_STATE_FULL);
final Notification.Builder builder = new Notification.Builder(uber);
builder.setSmallIcon(R.drawable.switch_notification);
if (image != null) {
builder.setLargeIcon(image);
}
builder.setOngoing(true);
PendingIntent inCallPendingIntent =
PendingIntent.getActivity(uber, 234,
UberVoice.createInCallIntent(), 0);
builder.setContentIntent(inCallPendingIntent);
builder.setContentText(body);
builder.setUsesChronometer(false);
builder.setContentTitle(title);
builder.setCategory(Notification.CATEGORY_CALL);
builder.setVisibility(Notification.VISIBILITY_PUBLIC);
builder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE), AudioManager.STREAM_RING);
builder.setVibrate(new long[]{500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500});
builder.setPriority(Notification.PRIORITY_MAX);
builder.setTicker(title);
builder.setFullScreenIntent(inCallPendingIntent, true);
builder.addAction(R.drawable.hangup_action, "Reject", CallService.getPendingIntent(uber, callJson, CallService.REJECT));
builder.addAction(R.drawable.answer_action, "Answer", CallService.getPendingIntent(uber, callJson, CallService.ANSWER));
NotificationManager notificationManager = (NotificationManager) uber.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = builder.build();
notificationManager.notify(INCOMING_CALL_NOTIFICATION_ID, notification);
Hier ist der creatCallIntent Code:
public static Intent createInCallIntent() {
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
| Intent.FLAG_ACTIVITY_NO_USER_ACTION);
intent.setClassName("<package>", IncomingCallActivity.class.getName());
return intent;
}
Und hier ist die IncomingCallActivity.onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int flags = WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON;
getWindow().addFlags(flags);
setContentView(R.layout.activity_incoming_call);
ich versucht habe, Starten Sie diese Aktivität direkt (Uber ist Anwendungsreferenz)
Intent incomingCallIntent = new Intent(uber, IncomingCallActivity.class);
String callJson = call.toJson(uber).toString();
incomingCallIntent.putExtra("call", callJson);
incomingCallIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
uber.startActivity(incomingCallIntent);
Was mache ich falsch?
[Notification.fullScreenIntent:] (https://developer.android.com/reference/android/app/Notification.html#fullScreenIntent) Die Systembenutzeroberfläche kann eine Heads-up-Benachrichtigung anzeigen, anstatt diese Absicht zu starten , während der Benutzer das Gerät verwendet. – adneal
Ja nein, ich verstehe das, aber offensichtlich "wählt" mein Handy den ganzen Bildschirm aus, warum nicht für meine App? Meine Telefon-App zeigt korrekt Heads-Up an, wenn ich in einer immersiven Aktivität bin. – Leo
@Leo Wenn eine Benachrichtigung mit der ID INCOMING_CALL_NOTIFICATION_ID bereits aktiv ist, wird fullScreenIntent für die neue Benachrichtigung ignoriert. Könnte das das Problem sein, mit dem Sie es zu tun haben? – Vikram