23

更新: Android 3.0 より前の互換性のために元の投稿を作り直しています。

簡単な通知を作成しようとしていますが、ライト以外はすべてうまく機能します。通知が発生したときに画面をオフにしています。この廃止されたコードの音と振動を使用すると、Android 4.0 (Galaxy Nexus) と Android 2.3 (HTC EVO) で機能します。

  • 2.3 HTC EVO では、ライトも機能します。
  • 4.0 Galaxy Nexus では、ライトが機能しません。

    Notification notification = 
            new Notification(R.drawable.ic_launcher, "My Ticker!",System.currentTimeMillis());
    notification.setLatestEventInfo(context, "My Title", "My Message", pendingIntent);
    notification.defaults |= Notification.DEFAULT_SOUND;
    notification.defaults |= Notification.DEFAULT_VIBRATE;
    
    //notification.defaults |= Notification.DEFAULT_LIGHTS;
    
    notification.ledARGB = 0xff00ff00;
    notification.ledOnMS = 300;
    notification.ledOffMS = 1000;
    notification.flags |= Notification.FLAG_SHOW_LIGHTS;
    
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    

v4 互換性ライブラリの一部ではない新しい API も試したので、Galaxy Nexus でしかテストできませんでした。バイブレーションとサウンドは再び機能しますが、ライトは機能しません。

Notification.Builder builder = new Notification.Builder(context);
        builder.setContentIntent(pendingIntent)
            .setSmallIcon(R.drawable.ic_launcher)
            .setTicker("My Ticker")
            .setWhen(System.currentTimeMillis())
            .setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND | Notification.FLAG_SHOW_LIGHTS)
            .setLights(0xff00ff00, 300, 100)
            .setContentTitle("My Title 1")
            .setContentText("My Text 1");
        Notification notification = builder.getNotification();

これを 2 台の在庫の Galaxy Nexus スマートフォンでテストしましたが、ライトはどちらでも動作しません。テストを実行すると画面がオフになり、電話上の他のすべてのアプリが問題なくライトをトリガーします。

4

9 に答える 9

9

setDefaults(DEFAULT_LIGHTS) または setDefaults(DEFAULT_ALL) を使用すると、FLAG_SHOW_LIGHTS および setLights() へのすべての呼び出しが無視されます。私の電話では、デフォルトでは何も点灯しないことがわかりました。したがって、DEFAULT_ALL または DEFAULT_LIGHTS を使用しないでください。必要に応じて RGB カラーで遊んでください。ただし、0xff00ff00 はほとんどすべての場合に機能するはずです。

于 2012-05-01T19:07:08.640 に答える
7

LEDは、デバイスの電源がオフになっているときに機能します(電源がオフになっていない:P)。テストするには、遅延のある通知を作成する簡単なアプリを作成し、遅延中に電話の電源を切り、LEDが点滅するのを待ちます。

于 2013-01-29T23:07:33.820 に答える
7

今日これに出くわしました..それでも役立つ場合...優先度の高い特定の通知のみ-HIGH、MAXはLEDを点灯させることができますが、優先度の低いLOW、MINの通知は点灯しないはずです。これを追加すると、LEDが光るはずです...

builder.setPriority(通知.PRIORITY_MAX)

于 2013-10-23T10:42:27.040 に答える
6

4 怠惰な人々:

private void testNotification() {
    Notification.Builder builder = new Notification.Builder(this);
    builder.setSmallIcon(R.drawable.ic_launcher)
        .setPriority(Notification.PRIORITY_HIGH)
        .setOngoing(true);
    builder.setLights(0xff00ff00, 300, 100);
    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    manager.notify(1, builder.build());
}
于 2016-06-02T20:20:06.983 に答える
2

通知を受信したときに画面のライトをオンにしたい場合は、 と を使用することをお勧めしPowerManagerますWakeLock。以下は、前述のクラスを使用して画面をオンにするコードです。

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
                                 | PowerManager.ACQUIRE_CAUSES_WAKEUP
                                 | PowerManager.ON_AFTER_RELEASE, "MyWakeLock");
wakeLock.acquire();

注: を使用して wakeLock を解除することを忘れないでくださいwakeLock.release();。そうしないと、画面がオンのままになります。

PS ユーザーは、ロック ボタンを使用して画面をオフにすることもできます。私は自分のアプリで同じことをしました。私は使用しておらずwakeLock.release();、画面をオフにするのはユーザーに任せています。

于 2014-11-05T08:15:58.727 に答える
1

私も何年もこれと戦っていました!LEDはSamsungデバイスではうまく機能しましたが、他のデバイスではまったくうまくいきませんでした. 私は最終的に解決策を見つけました。オンとオフのイベントをスクリーニングするようにリスナーをセットアップします。

registerReceiver(this.screenOnListener, new IntentFilter("android.intent.action.SCREEN_ON"));
registerReceiver(this.screenOffListener, new IntentFilter("android.intent.action.SCREEN_OFF"));

次に、これらのリスナーに通知の設定とキャンセルを追加します。

public class ScreenOffListener extends BroadcastReceiver
{
    public ScreenOffListener() {}

    public void onReceive(Context paramContext, Intent paramIntent)
    {
        Notification notif = new Notification();
        notif.ledARGB = "0xFFFF0000"; // Red
        notif.flags = Notification.FLAG_SHOW_LIGHTS;
        notif.ledOnMS = 200; 
        notif.ledOffMS = 200; 
        nm.notify(NOTIFICATION_ID, notif);
    }
}

public class ScreenOnListener extends BroadcastReceiver
{
    public ScreenOnListener() {}

    public void onReceive(Context paramContext, Intent paramIntent)
    {
        NotificationTest.nm.cancel(NOTIFICATION_ID);
    }
}   

今私のために働きます。何らかの奇妙な理由で、この時点で通知を設定する必要があるか、LED が機能しません。通知の他のすべては、いつでも設定すると機能します...

注: 色とオン/オフ時間は、少なくとも点滅する LED では実際には機能しません。これらは HW と LPG (Led Pattern Generator) によって定義されているため、CPU が多かれ少なかれオフになっているディープ スリープでも機能するため、サポートされるパターンと色は使用している HW によって異なります。ほとんどのシステムには点滅パターンが 1 つしかなく、R、G、B (およびその組み合わせ) が完全にオフになる場合があります。完全に点灯する LED の場合、すべての色が利用できるようです。

于 2014-03-24T11:16:05.027 に答える
0
.SetLights (Color.Red.ToAndroid (), 300, 300)
于 2015-02-13T15:25:23.210 に答える