2

我正在尝试在 SMS 通知中实现一个相当常见的问题。

我想在屏幕上创建一个通知(自定义视图/文本/等),但我想尽量减少对用户的干扰。我不想创建一个额外的步骤来拖动通知栏并单击它,这是大多数股票消息应用程序所做的。

我最初的实现是通过接收器调出一个 AlertDialog,它可以正常工作,但当然会从用户手中夺走控制权,这不是我最终想要的。

我的第二个实现是通过一个“不可见”的活动来调出一个 PopupWindow。但是,正如您可能知道的那样,启动任何 Activity 都会关注当前的 Activity,因此即使用户可以看到仍在后台的内容,它也会(至少)导致用户一键分心。

我的第三个实现是自定义 Toast ——这很好用,除了它不可点击并且它的生命周期没有得到很好的控制。

所以,知道我已经实现了什么,我想问一下是否有人知道或知道我们如何在顶部附近弹出一个弹出窗口而不会造成任何干扰。我知道有几个通知管理器能够做到这一点。

这是 Pops Notification 的示例。 http://imageshack.us/photo/my-images/849/screenshot2012081618583.png/

4

1 回答 1

1

为什么不使用常规通知?

您可以对其进行配置,使其可以使手机振动、发出声音,甚至更改 LED 颜色(如果支持)。

这是我一直用来提供通知的简单方法:

注意:为了使振动起作用,您必须在清单中添加:

<uses-permission android:name="android.permission.VIBRATE" >

方法:

public static void sendNotification(Context caller, Class<?> activityToLaunch, String title, String msg, int numberOfEvents,boolean sound, boolean flashLed, boolean vibrate,int iconID) {
    NotificationManager notifier = (NotificationManager) caller.getSystemService(Context.NOTIFICATION_SERVICE);

    final Notification notify = new Notification(iconID, "", System.currentTimeMillis());

    notify.icon = iconID;
    notify.tickerText = title;
    notify.when = System.currentTimeMillis();
    notify.number = numberOfEvents;
    notify.flags |= Notification.FLAG_AUTO_CANCEL;
    if (sound) notify.defaults |= Notification.DEFAULT_SOUND;

    if (flashLed) {
    // add lights
        notify.flags |= Notification.FLAG_SHOW_LIGHTS;
        notify.ledARGB = Color.CYAN;
        notify.ledOnMS = 500;
        notify.ledOffMS = 500;
    }

    if (vibrate) {
        notify.vibrate = new long[] {100, 200, 300};
    }

    Intent toLaunch = new Intent(caller, activityToLaunch);
    toLaunch.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
    toLaunch.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent intentBack = PendingIntent.getActivity(caller, number, toLaunch, 0);

    notify.setLatestEventInfo(caller, title, msg, intentBack);   
    notifier.notify(number, notify);
    number = number+1;
}
于 2012-08-17T16:42:51.823 回答