2016-08-30 1 views
10

Ich arbeite an einer Android-App. Letzteres verwendet eine Benachrichtigung mit einer benutzerdefinierten Ansicht, die auf dem Sperrbildschirm angezeigt wird. Leider kann ich den Ripple- und Elevation-Effekt nicht erreichen, wenn ich wie andere Benachrichtigungen darauf tippe. Außerdem löst eine einzelne Berührung die von mir konfigurierte Absicht aus, während andere Benachrichtigungen doppelt abgetippt werden müssen.Android Lock Screen Benachrichtigung Benutzerdefinierte Ansicht mit Ripple und Double Tap

Ich habe ein minimales Projektbeispiel auf Github setzen:

https://github.com/lpellegr/android-notification-custom-example

Das App Beispiel bietet zwei Schaltflächen Mitteilungen zu veröffentlichen: ein, die eine benutzerdefinierte Ansicht verwendet und aus den oben genannten Problemen und anderen Mitteilungs erwähnt leiden, dass verwendet die Standardsystemansicht mit dem erwarteten Verhalten.

enter image description here

Jede Idee, wie die Welligkeit und Höheneffekt zu erhalten, aber das Doppel-Tippen Verhalten auch (durch die benutzerdefinierte Ansicht zu halten), ist willkommen.

PS: Ich bin Targeting API 19+ und ich möchte ein benutzerdefinierte Ansicht Layout für die Benachrichtigung verwenden, zusammen mit setOnClickPendingIntent da nur erlaubt diesen Zuhörer eine Aktivität zu öffnen, was auch immer der Sicherheitsmodus des Gerätes ist.

Antwort

3

Entfernen setOnClickPendingIntent aus dem Verfahren publishNotificationWithCustomView und setContentIntent zur Notifizierung Builder hinzufügen:

private void publishNotificationWithCustomView() { 
    String title = "Notification Custom View"; 
    String content = "No ripple effect, no elevation, single tap trigger"; 
    Context context = getApplicationContext(); 

    NotificationCompat.Builder builder = 
      new NotificationCompat.Builder(context) 
        .setWhen(System.currentTimeMillis()) 
        .setDefaults(DEFAULT_ALL) 
        .setSmallIcon(R.mipmap.ic_launcher) 
        .setPriority(NotificationCompat.PRIORITY_HIGH) 
        .setOnlyAlertOnce(true) 
        .setAutoCancel(false) 
        .setColor(ContextCompat.getColor(context, R.color.colorAccent)) 
        .setContentTitle(title) 
        .setContentText(content) 
        .setOngoing(true) 
        .setCategory(NotificationCompat.CATEGORY_ALARM) 
        .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) 
        .setContentIntent(createLockscreenNotificationPendingIntent(context)); 

    int notificationLayoutResId = R.layout.lock_screen_notification; 

    // using folder layout-vX is having issue with LG devices 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
     notificationLayoutResId = R.layout.lock_screen_notification_android_n; 
    } 

    RemoteViews remoteView = new RemoteViews(
      context.getPackageName(), notificationLayoutResId); 
    remoteView.setTextViewText(R.id.title, title); 
    remoteView.setTextViewText(R.id.text, content); 

    builder.setCustomContentView(remoteView); 

    Notification notification = builder.build(); 
    publishNotification(context, notification, 7); 
} 

Dann entfernen android:clickable="true" von lock_screen_notification.xml und lock_screen_notification_android_n.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="64dp"> 

    .... 
+2

Vielen Dank für die Anregung. Leider, wenn ich _setContentIntent_ anstelle von _setOnClickPendingIntent_ verwende, wenn das Gerät mit einem Schema, Pin, etc. gesichert ist, erfordert die Absicht, den Sperrbildschirm zu entsperren, um die Aktivität zu sehen. Wenn _setOnClickPendingIntent_ festgelegt ist, wird die Aktivität ungeachtet des Sicherheitsmodus ohne Entsperrung geöffnet. Aus diesem Grund ist Ihr Vorschlag für mich nicht gültig. – Laurent

+0

@Laurent Haben Sie eine Lösung gefunden? – cristianomad

Verwandte Themen