在 android API 23 中引导通知

led notification in android API 23

我想打开或闪烁 android 设备上的 LED。所以我通过下面的代码来做到这一点

NotificationManager nm = ( NotificationManager ) getSystemService( NOTIFICATION_SERVICE );
    Notification notif = new Notification();
    notif.ledARGB = 0xFF0000; // #0000FF
    notif.flags = Notification.FLAG_SHOW_LIGHTS;
    notif.ledOnMS = 100;
    notif.ledOffMS = 100;
    nm.notify(5, notif);
    Toast.makeText(this, "RED LED SELECTED", Toast.LENGTH_LONG).show();

这行得通。除非我在 Marshmallow 6.0.1 API: 23 上测试它。它崩溃了。谁能告诉我解决方法?

第一步:检查权限

int permissionCheckCamera = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
        int permissionCheckFlashLight = ContextCompat.checkSelfPermission(this, Manifest.permission.FLASHLIGHT);
        if (permissionCheckCamera != PackageManager.PERMISSION_GRANTED && permissionCheckFlashLight != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA, Manifest.permission.FLASHLIGHT}, REQUEST_CAMERA);
        } else {
            //TODO
        }

第二步:请求权限时处理回调

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case REQUEST_CAMERA:
                if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                    //TODO
                }
                break;

            default:
                break;
        }
    }

//TODO 您将使用 LED 构建通知。

第三步:在manifest.xml

上添加权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera.flash" />

它会帮助你。

请试试这个:

它抛出的异常显示由于小图标无效导致通知无效,这在 API 级别 23 及以上是强制性的。此外,始终使用 NotificationCompat.Builder 构建通知,如下所示:

NotificationManagerCompat nm = NotificationManagerCompat.from(this);
NotificationCompat.Builder notif = new NotificationCompat.Builder(this);
notif.setLights(0xff0000, 100, 100);
notif.setSmallIcon(R.mipmap.ic_launcher);
notif.setContentTitle("Notification Title");
nm.notify(5, notif.build());

此外,内容标题不是强制性的,但您应该使用它向用户提供有关通知的正确信息。否则,他们很烦人。

正如the official guide for building a notification所说:

Create a Notification Builder

When creating a notification, specify the UI content and actions with a NotificationCompat.Builder object. At bare minimum, a Builder object must include the following:

  • A small icon, set by setSmallIcon()
  • A title, set by setContentTitle()
  • Detail text, set by setContentText()

For example:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!")

添加 LED 灯

致电NotificationCompat.Builder.setLights(int, int, int),在您的情况下:

mBuilder.setLights(0xFFFF0000 /* argb */, 100 /* onMs */, 100 /* offMs */);

Post通知

Notification n = mBuilder.build();
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(5, n);

这个 NotificationCompat.Builder class 在 support-v4 库中可用,我强烈建议使用它来保持与旧平台的兼容性。

还有Notification.Builderclass,如果您珍惜时间,请忽略。