2

SMS 通知でかなり一般的な質問を実装しようとしています。

画面に通知(カスタムビュー/テキストなど)を作成したいのですが、ユーザーの気を散らすことは最小限にしたいです。通知バーをドラッグしてクリックするという余分な手順を作成したくありません。これは、ほとんどのストックメッセージングアプリがとにかく行うことです.

私の最初の実装は、レシーバーを介して AlertDialog を起動することでした。これは正常に機能しますが、もちろんユーザーから制御を奪います。これは最終的に望んでいたことではありません。

私の 2 番目の実装は、「見えない」アクティビティを通じて PopupWindow を表示することでした。ただし、おそらくご存知のように、アクティビティを起動すると現在のアクティビティに焦点が当てられるため、ユーザーがまだバックグラウンドにあるものを見ることができたとしても、(少なくとも) 1 クリックで気を散らすことになります。

私の 3 番目の実装はカスタム Toast でした。これは問題なく動作しますが、クリック可能ではなく、有効期間が適切に制御されていません。

それで、私が何を実装したかを知っているので、気が散ることなく上部にポップアップを表示する方法を誰かが知っているか、手がかりを持っているかどうか尋ねたいと思います. いくつかの通知マネージャーがこれを実行できることを知っています。

これは Pops 通知の例です。 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 に答える