Android Oreo-如何自定义前台服务状态栏
我启动了一个前台服务,它显示在状态栏的android系统电池信息下 是否有办法自定义所显示的信息(标题、潜台词、图标等) 服务代码:已编辑代码Android Oreo-如何自定义前台服务状态栏,android,notifications,android-8.0-oreo,foreground-service,Android,Notifications,Android 8.0 Oreo,Foreground Service,我启动了一个前台服务,它显示在状态栏的android系统电池信息下 是否有办法自定义所显示的信息(标题、潜台词、图标等) 服务代码:已编辑代码 @Override public void onCreate() { context = this.getApplicationContext(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { Intent notifi
@Override
public void onCreate() {
context = this.getApplicationContext();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Intent notificationIntent = new Intent(context, CallbackTestWidgetService.class);
PendingIntent pendingIntent =
PendingIntent.getActivity(context, 10, notificationIntent, 0);
Notification notification = new Notification.Builder(context, "Test")
.setContentTitle("Test")
.setContentText("text")
.setContentIntent(pendingIntent)
.setSmallIcon(R.drawable.test)
.setTicker("test")
.build();
CharSequence name = "test";
String description = "test";
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel("10", name, importance);
channel.setDescription("test");
// Register the channel with the system; you can't change the importance
// or other notification behaviors after this
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
startForeground(10, notification);
}
}
您正在生成传递到startForeground的通知。使用createContentView函数,就像要自定义的普通通知一样
请注意,这只适用于较新版本的Android,您可能希望使用支持库中的NotiicationCompat类来支持特定于版本的api差异,并在模拟器的几个不同api上进行测试。您正在构建一个通知,以传递给startForeground。使用createContentView函数,就像要自定义的普通通知一样
请注意,这只适用于较新版本的Android,您可能希望使用支持库中的NotiicationCompat类来支持特定版本的api差异,并在几个不同的模拟器api上进行测试。当应用程序未发布通知时,您看到的是默认通知 没有发布通知(尽管您调用了
startForeground
)的原因是您的目标是API 26或更高版本,并且没有将通知与应用程序关联。这将导致您的通知完全按照该页上的注释删除:
警告:如果您以Android 8.0(API级别26)为目标,并在未指定通知通道的情况下发布通知,则不会显示通知,系统会记录错误
您必须创建通知频道,然后在生成通知时包含通知频道的id。当应用程序未发布通知时,您看到的是默认通知 没有发布通知(尽管您调用了
startForeground
)的原因是您的目标是API 26或更高版本,并且没有将通知与应用程序关联。这将导致您的通知完全按照该页上的注释删除:
警告:如果您以Android 8.0(API级别26)为目标,并在未指定通知通道的情况下发布通知,则不会显示通知,系统会记录错误
您必须创建通知通道,然后在生成通知时包含通知通道的id。
我无法通过调用setContentTitle(CharSequence)
和setContentText(CharSequence)
来更改通知内容标题和文本。
你知道为什么吗?
我无法通过调用setContentTitle(CharSequence)
和setContentText(CharSequence)
来更改通知内容标题和文本。
你知道为什么吗?如果他们想完全定制通知,这是一个很有帮助的建议,但这并不是按照要求更改图标、标题和副标题所必需的,他们只需要首先正确构建通知。与我所做的有什么不同?createContentView不是一个通知生成器?如果他们想完全自定义通知,这是一个有用的建议,但这并不是只需要根据要求更改图标、标题和副标题,他们只需要首先正确构建通知。与我所做的有什么不同?createContentView不是一个通知生成器?我不理解google文档()说的“前台服务必须为状态栏提供通知,状态栏位于当前标题下。”并显示了一个使用标准模型的标准示例:notification notification=new notification.builder(这是频道默认的重要性)是的,那个文档已经过时了。所有的都是最新的。只要用您创建的通知调用
startForeground
。不是很清楚的文档(可能是我的英语):因此,我仍然使用上面显示的通知,我添加了频道并呼叫startforeground。我的应用程序工作正常,但该应用程序仍显示在android系统通知中。如果您仍然看到“测试正在使用电池”通知,则仍有一些内容需要更改。在您创建的位置使用更新的代码编辑您的问题我不理解google doc()说“前台服务必须为状态栏提供通知,状态栏位于当前标题下。”并显示了一个使用标准模型的标准示例:notification notification=new notification.Builder(这是频道默认的重要性)是的,那个文档已经过时了。所有的都是最新的。只要用您创建的通知调用startForeground
。不是很清楚的文档(可能是我的英语):因此,我仍然使用上面显示的通知,我添加了频道并呼叫startforeground。我的应用程序工作正常,但该应用程序仍显示在android系统通知中。如果您仍然看到“测试正在使用电池”通知,则仍有一些内容需要更改。在您创建的位置使用更新的代码编辑您的问题您的通知通道,并在构建通知时使用它。您应该用代码发布一个问题。用不同的问题回答问题是不常见的:)您应该用代码发布一个问题。用不同的问题回答问题是不常见的:)