我于2017年底在Play商店中提交了我的应用,该应用正常运行。 然后它是在Eclipse中构建的。
现在,我在Android Studio中运行它,相同的代码未显示任何通知。
这是一个永久性通知,在我调用应用程序的finish()
方法之后出现。 (为什么这样做:如果您想知道,请参阅底部)。
因此,我查看了所有示例和所有工作。没有显示单个通知。
因此,我开始一个活动,并在该活动中显示通知。然后我打电话给finish()
。
这是我的代码:
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
intent, 0);
CharSequence connectedPart = getResources().getString(R.string.app_name);
String melding = "";
melding = getResources().getString(R.string.screentimeoutsetto) + " " + newTimeString + ".";
NotificationManager notificationManager = (NotificationManager) this
.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification.Builder(this)
.setContentTitle(connectedPart)
.setTicker(connectedPart)
.setContentText(melding)
.setSmallIcon(R.drawable.ic_stat_name)
.setContentIntent(pendingIntent)
.setOngoing(true)
.build();
notification.flags |= Notification.FLAG_ONGOING_EVENT;
notification.flags |= Notification.FLAG_NO_CLEAR;
notificationManager.notify(2, notification);
依赖性:
dependencies{
implementation "com.android.support:support-compat:26.1.0"
}
为什么我这样做:
我的应用程序执行1件事:切换screentimeout。因此,当您启动它时,它将屏幕超时设置为30分钟(启动,设置通知,然后finish()
)。重新开始,它将删除通知并恢复屏幕超时的原始值。
答案 0 :(得分:1)
从Android Oreo开始,所有通知都需要一个通知通道,否则该通知将不会发布,并且错误会出现在您的logcat中。这是一个示例,该示例是从我的一个应用程序中提取的:
private static void createNotificationChannel(Context ctx) {
if(SDK_INT < O) return;
final NotificationManager mgr = ctx.getSystemService(NotificationManager.class);
if(mgr == null) return;
final String name = ctx.getString(R.string.channel_name);
if(mgr.getNotificationChannel(name) == null) {
final NotificationChannel channel =
new NotificationChannel(CHANNEL_ID, name, IMPORTANCE_DEFAULT);
mgr.createNotificationChannel(channel);
}
}
//Usage...
createNotificationChannel(context);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID);
builder.setSmallIcon(R.drawable.ic_alarm_white_24dp);
//etc...
manager.notify(id, builder.build());
答案 1 :(得分:1)
现在,从Android 8.0起,您需要在显示通知之前创建通知通道。这是文档link