带有波纹和双击的 Android 锁屏通知自定义视图

Posted

技术标签:

【中文标题】带有波纹和双击的 Android 锁屏通知自定义视图【英文标题】:Android Lock Screen Notification Custom View with Ripple and Double Tap 【发布时间】:2017-01-07 01:11:44 【问题描述】:

我正在开发一个 android 应用程序。这最后使用了带有自定义视图的通知,该视图显示在锁定屏幕上。不幸的是,当我像其他通知一样点击它时,我无法获得涟漪和提升效果。此外,单次触摸触发我配置的意图,而其他通知需要双击。

我在 Github 上放了一个最小的项目示例:

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

该应用示例提供了两个按钮来发布通知:一个使用自定义视图并遭受上述问题的困扰,另一个使用默认系统视图并具有预期行为的通知。

欢迎任何关于如何获得波纹和提升效果以及双击行为(通过保留自定义视图)的想法。

PS:我的目标是 API 19+,我想为通知使用自定义视图布局,以及 setOnClickPendingIntent 因为只有此侦听器允许打开活动,无论设备的安全模式如何是。

【问题讨论】:

【参考方案1】:

从方法publishNotificationWithCustomView 中删除setOnClickPendingIntent 并将setContentIntent 添加到通知构建器:

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

然后从lock_screen_notification.xmllock_screen_notification_android_n.xml中删除android:clickable="true"

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_
    android:layout_>

    ....

【讨论】:

感谢您的建议。不幸的是,如果我使用 setContentIntent 而不是 setOnClickPendingIntent,当设备使用架构、pin 等进行保护时,意图需要解锁锁定屏幕才能看到活动。当设置 setOnClickPendingIntent 时,无论安全模式是什么,活动都会在不解锁的情况下打开。因此,您的建议对我无效。 @Laurent 你找到解决方案了吗? 仍然没有解决方案:X 太无聊了

以上是关于带有波纹和双击的 Android 锁屏通知自定义视图的主要内容,如果未能解决你的问题,请参考以下文章

带有波纹动画的Android自定义视图边缘裁剪

单击事件和双击事件冲突问题

Android - 自定义多击事件

如何区分鼠标的单击和双击事件

unity中让物体移动到鼠标点击位置(单击移动和双击暂停移动)

Android自定义Preference点击波纹