29

私は基本的に Android 開発の実験を行っているところですが、数日前に「Go SMS Pro」というアプリに出会いました。このアプリは、さまざまな色 (青、緑、オレンジ、ピンク、ライト) で通知を設定できます。青い)。だから、私は自分のアプリでこれを自分でやろうとしましたが、色やLEDの点滅内部を変更することはできません。私は現在このコードを使用しています:

public class MainActivity extends Activity {
  static final int NOTIFICATION_ID = 1;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(buttonOnClick);
  }

  public OnClickListener buttonOnClick = new OnClickListener() {

    @Override
    public void onClick(View v) {
      String ns = Context.NOTIFICATION_SERVICE;
      NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);

      Notification notification = new Notification(R.drawable.icon, "Hello", System.currentTimeMillis());
      notification.flags = Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL;
      notification.ledARGB = Color.BLUE;
      notification.ledOnMS = 1000;
      notification.ledOffMS = 300;

      Context context = getApplicationContext();
      CharSequence contentTitle = "My notification";
      CharSequence contentText = "Hello World!";
      Intent notificationIntent = new Intent(MainActivity.this, MainActivity.class);
      PendingIntent contentIntent = PendingIntent.getActivity(MainActivity.this, 0, notificationIntent, 0);

      notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

      mNotificationManager.notify(NOTIFICATION_ID, notification);
    }
  };
}

しかし、私が言ったように、それは私が望むようには機能しません。代わりに、コードで設定した遅延ではなく、デフォルトの遅延で通常の緑色で点滅するだけです。

私のコードの何が問題なのか、またはこれを達成するために何か他のことをしなければならないかどうかを知っている人はいますか?

4

8 に答える 8

12

次のコードを使用できます。

private static final int LED_NOTIFICATION_ID= 0; //arbitrary constant

private void RedFlashLight() {
    NotificationManager nm = (NotificationManager) getSystemService( NOTIFICATION_SERVICE);
    Notification notif = new Notification();
    notif.ledARGB = 0xFFff0000;
    notif.flags = Notification.FLAG_SHOW_LIGHTS;
    notif.ledOnMS = 100; 
    notif.ledOffMS = 100; 
    nm.notify(LED_NOTIFICATION_ID, notif);
}

例に示すように ARGB 値を使用する代わりに、android.graphics.Colorクラス内で int プロパティを使用して色を取得することもできます (例Color.WHITE)

于 2011-06-09T12:25:47.530 に答える
11

試しましたか: .setLights(Color.BLUE, 500, 500) ?

S3、N5、N4、Nexus one でも問題なく動作します。

于 2014-06-12T08:31:20.767 に答える
11

LED は、Android フォンの非常に非標準的な機能です。それらに依存すると、ユーザーベースのかなりの部分を逃すことになります (たとえば、LED さえ持っていない SGS 電話を考えてみてください)。

とはいえ、int フィールド ledARGB は役に立ちませんでした。その APK からの JNI 呼び出しを調べる必要があるかもしれません。私の推測では、実行中のデバイスに応じてさまざまな方法があると思います。

于 2011-06-04T04:39:40.547 に答える
7

FLAG_SHOW_LIGHTSおよびNotification.Builder.setLights(int,int,int); Android O (API レベル 26) 以降は非推奨です。この機能を API レベル 26 以降で使用する予定がある場合は、 NotificationChannelを参照してください。

NotificationChannel mChannel = new NotificationChannel(id, name, importance);
.....
.....
mChannel.enableLights(true);
// Sets the notification light color for notifications posted to this
// channel, if the device supports this feature.
mChannel.setLightColor(Color.RED);

しかし、この新しい実装では、ハードウェアに依存するミリ秒単位の LED オンとミリ秒単位の LED オフを制御できない場合があります。

于 2017-08-21T09:18:48.687 に答える
2

LED カラーのサポートは本当にむらがあります。USB ケーブルを抜いて、他のアプリが同時に LED を変更しようとしていないことを確認してください。また、画面をオフにします。

于 2011-06-08T22:13:11.967 に答える
2

以下のソースを見てください。

NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(ctx)
                        .setPriority(Notification.PRIORITY_HIGH)
                        .setSmallIcon(getNotificationIcon())
                        .setColor(0xff493C7C)
                        .setContentTitle(ctx.getString(R.string.app_name))
                        .setContentText(msg)
                        .setDefaults(Notification.DEFAULT_SOUND)
                        .setLights(0xff493C7C, 1000, 1000)
                        .setStyle(new NotificationCompat.BigTextStyle().bigText(styledMsg));
于 2016-11-15T13:15:11.587 に答える
2

16 進数の色を使用してみてください。アルファ値を含め、デフォルトを 0 に設定します。

notification.defaults = 0;
notification.ledARGB = 0xff0000ff;

また、通知インターフェイスには次のように表示されます。

public int ledARGB
Since: API Level 1

The color of the led. The hardware will do its best approximation.

あなたのハードウェアにはすべての色があると思いますが、そうではないかもしれません。

于 2011-05-29T18:04:31.847 に答える
1

以下のコードを試してみましたが、ライトは問題なく動作します。私の携帯は Nexus 6P です。

mBuilder.setContentTitle("APP_NAME")
                .setContentText(msg)
                .setContentIntent(PendingIntent.getActivity(mCtxt, UUID.randomUUID().hashCode(), new Intent(mCtxt, ReceivePushActivity.class), Notification.FLAG_AUTO_CANCEL))
                .setWhen(System.currentTimeMillis())
                .setPriority(Notification.PRIORITY_DEFAULT)
                .setAutoCancel(true)
                //.setDefaults(Notification.DEFAULT_ALL)
                .setVibrate(new long[] {0, 1000, 200,1000 })
                .setLights(Color.MAGENTA, 500, 500)
                .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                .setSmallIcon(R.mipmap.notify_logo);

        Notification ntf = mBuilder.build();
//        ntf.flags = Notification.DEFAULT_ALL;
//        ntf.flags = Notification.FLAG_ONLY_ALERT_ONCE;
//        ntf.flags = Notification.FLAG_AUTO_CANCEL;

        mNotificationManager.notify(notifyId, ntf);

つまり、「DEFAULT_ALL」設定を削除します。

于 2017-01-09T01:44:06.723 に答える