在 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.Builder
class,如果您珍惜时间,请忽略。
我想打开或闪烁 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, aBuilder
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.Builder
class,如果您珍惜时间,请忽略。