2012-05-01 36 views
19

Cập nhật: Tôi đang làm lại bài đăng gốc để tương thích trước Android 3.0.Làm cách nào để có thông báo đèn LED?

Tôi đang cố tạo một thông báo đơn giản và mọi thứ nhưng ánh sáng hoạt động rất tốt. Tôi tắt màn hình khi thông báo kích hoạt. Sử dụng âm thanh và rung động mã không dùng nữa này hoạt động trên Android 4.0 (Galaxy Nexus) và Android 2.3 (HTC EVO).

  • Trên 2,3 HTC EVO, đèn cũng hoạt động.
  • Trên Nexus Galaxy Nexus, đèn không hoạt động.

    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; 
    

Tôi cũng đã cố gắng API mới hơn mà không phải là một phần của thư viện tương thích v4, vì vậy tôi chỉ có thể kiểm tra điều này trên Galaxy Nexus. Rung và âm thanh hoạt động trở lại nhưng không hoạt động.

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

Tôi hiện đã thử nghiệm điều này trên hai điện thoại Galaxy Nexus và đèn hoạt động trên cả hai. Màn hình tắt khi tôi chạy thử nghiệm và tất cả các ứng dụng khác trên điện thoại sẽ kích hoạt đèn không có vấn đề.

Trả lời

8

Nếu bạn sử dụng setDefaults (DEFAULT_LIGHTS) hoặc setDefaults (DEFAULT_ALL), nó sẽ bỏ qua FLAG_SHOW_LIGHTS và bất kỳ lệnh gọi nào tới setLights(). Tôi thấy rằng trên điện thoại của tôi, các giá trị mặc định sẽ không sáng lên bất cứ thứ gì. Vì vậy, không sử dụng DEFAULT_ALL hoặc DEFAULT_LIGHTS, và chơi với màu RGB nếu cần thiết ... mặc dù 0xff00ff00 nên làm việc trong khá nhiều trường hợp.

+2

Không có đèn với điều này: .setDefaults (Thông báo.DEFAULT_SOUND | Thông báo.DEFAULT_VIBRATE) \t .setLights (0xff00ff00, 300, 100) – pcm2a

+0

Loại điện thoại nào? Bắt nguồn từ? ROM tùy chỉnh? –

+0

Cổ phiếu Galaxy Nexus và tôi cũng đã thử với điện thoại HTC Evo Android 2.3. Tôi đã làm lại bài đăng để hiển thị thông tin cập nhật này. – pcm2a

7

Đèn LED hoạt động khi thiết bị bị tắt (không tắt nguồn: P). Để kiểm tra viết một ứng dụng đơn giản để tạo thông báo với sự chậm trễ và trong khi trì hoãn tắt điện thoại và chờ xem đèn LED.

6

Đến ngày hôm nay ... nếu nó vẫn hữu ích ... Chỉ các thông báo nhất định có mức ưu tiên - HIGH, MAX sẽ có thể làm cho đèn LED phát sáng, trong khi những người có mức ưu tiên thấp hơn LOW, MIN không nên. Thêm này nên làm cho ánh sáng LED ...

builder.setPriority (Notification.PRIORITY_MAX)

+2

Cũng ưu tiên DEFAULT khiến đèn LED phát sáng. – TechNyquist

1

Tôi cũng đã chiến đấu với điều này cho lứa tuổi! Leds làm việc độc đáo trong các thiết bị Samsung nhưng trên những thiết bị khác, không có may mắn chút nào. Cuối cùng tôi đã tìm thấy một giải pháp mặc dù; thiết lập thính giả để sàng lọc và tắt các sự kiện:

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

Sau đó thêm bộ và hủy bỏ các thông báo trên những người nghe:

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

trình đối với tôi bây giờ. Đối với một số lý do kỳ lạ, thông báo cần phải được đặt tại thời điểm này hoặc người lãnh đạo không hoạt động. Mọi thứ khác trong thông báo hoạt động khi được đặt bất kỳ lúc nào ...

Lưu ý: màu sắc và thời gian bật/tắt không thực sự hoạt động ít nhất với đèn LED nhấp nháy. Chúng được xác định bởi HW và LPG (Led Pattern Generator) để chúng hoạt động trong giấc ngủ sâu khi CPU ít nhiều bị tắt và do đó các mẫu và màu sắc được hỗ trợ phụ thuộc vào HW bạn có. Hầu hết các hệ thống chỉ có một kiểu nhấp nháy và màu sắc có thể được giảm xuống đầy đủ trên R, G và B (và kết hợp). Đối với các đèn led sáng hoàn toàn, tất cả các màu dường như có sẵn.

1

Nếu bạn muốn bật đèn màn hình khi nhận được thông báo, tôi khuyên bạn nên sử dụng PowerManagerWakeLock. Sau đây là đoạn code để bật màn hình sử dụng các lớp học đề cập:

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

Chú ý: Đừng quên để giải phóng wakeLock sử dụng wakeLock.release();, nếu không màn hình sẽ vẫn được bật.

P.S. Người dùng cũng có thể tắt màn hình bằng nút khóa. Tôi đã làm tương tự trong ứng dụng của mình. Tôi không sử dụng wakeLock.release(); và để nó cho người dùng tắt màn hình.

+0

Kể từ API 19, điều này không được chấp nhận – Aenadon

0
.SetLights (Color.Red.ToAndroid(), 300, 300) 
0

Thêm thông báo mặc định.DEFAULT_LIGHTS.

Ví dụ:

Notification notification = new NotificationCompat.Builder(baseCtx) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentTitle(title) 
      .setContentText(body) 
      .setDefaults(
         Notification.DEFAULT_SOUND 
        | Notification.DEFAULT_VIBRATE 
        | Notification.DEFAULT_LIGHTS 
      ) 
      .build(); 
3

4 người lười biếng:

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()); 
} 
1

Tôi đã thử mã của tôi dưới đây, và nó hoạt động tốt đối với tôi. Điện thoại di động của tôi là 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); 

Chỉ cần xóa tất cả cài đặt 'DEFAULT_ALL'.

Các vấn đề liên quan