2016-08-30 81 views
10

Pracuję nad aplikacją na Androida. Ta ostatnia korzysta z powiadomienia z niestandardowym widokiem wyświetlanym na ekranie blokady. Niestety, nie mogę uzyskać efektu marszczenia i podniesienia, gdy kliknę w nią tak, jak inne powiadomienia. Ponadto pojedyncze dotknięcie wyzwala cel, który skonfigurowałem, a inne powiadomienia wymagają dwukrotnego dotknięcia.Powiadomienie ekranu blokady systemu Android Niestandardowy widok z klikaniem i podwójnym dotknięciem

Włożyłem minimalny przykładowy projekt na Github:

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

Przykładowa aplikacja oferuje dwa przyciski, aby opublikować informację: jeden, który wykorzystuje własny widok i cierpią z powodu problemów wymienionych powyżej oraz innego powiadomienia, że używa domyślnego widoku systemu z oczekiwanym zachowaniem.

enter image description here

Każdy pomysł o tym, jak uzyskać efekt pulsującego i elewacji, ale również podwójne zachowanie kranu (utrzymując widok niestandardowy) jest mile widziane.

PS: Jestem kierowania API 19+ i chcę wykorzystać niestandardowy układ widok na zgłoszenia, wraz z setOnClickPendingIntent ponieważ tylko tym słuchacz pozwala otworzyć działalność bez względu na tryb zabezpieczeń urządzenia jest.

Odpowiedz

3

Usuń setOnClickPendingIntent od sposobu publishNotificationWithCustomView i dodać setContentIntent do konstruktora zgłoszenia:

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); 
} 

Następnie wyjąć android:clickable="true" z lock_screen_notification.xml i 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

Dziękuję za sugestię. Niestety, jeśli używam _setContentIntent_ zamiast _setOnClickPendingIntent_, gdy urządzenie jest zabezpieczone schematem, stykiem itp., Intencja wymaga odblokowania ekranu blokady, aby zobaczyć aktywność. Po ustawieniu _setOnClickPendingIntent_ działanie jest otwierane bez odblokowywania, niezależnie od trybu zabezpieczeń. Z tego powodu Twoja sugestia nie jest dla mnie ważna. – Laurent

+0

@ Laurent Czy znalazłeś rozwiązanie? – cristianomad