如何使用Kotlin从Android中的IntentService发送通知

我是新的android开发,我想发送一个通知从IntentService当设备进入任何特定的地理围栏由用户设置。 我写了下面的代码发送通知。

class GeofenceIntentService : IntentService("GeofenceIntentService") { var notId: Int = 15452 override fun onHandleIntent(intent: Intent?) { var geofencingEvent = GeofencingEvent.fromIntent(intent) if(geofencingEvent.hasError()) { Log.e("JK-->>","geofencingError -->> "+geofencingEvent.hasError()) return } var geofenceTransition = geofencingEvent.geofenceTransition if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER) { var pendingIntent = PendingIntent.getService(applicationContext,0,Intent(applicationContext,MainActivity::class.java),PendingIntent.FLAG_UPDATE_CURRENT) var notification = NotificationCompat.Builder(applicationContext).setAutoCancel(true).setContentTitle("Entered In Geofence!").setContentText("Click here for return to app!!").setContentIntent(pendingIntent).build() var notiManager: NotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notId = notId + 1 notiManager.notify(notId,notification) Log.e("JK-->>", "Entered in geofence") } else if(geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) { var notiBuilder = NotificationCompat.Builder(this).setAutoCancel(true).setContentTitle("Entered In Geofence").setContentText("Click Here for return to app!").build() var notiManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager var intent = Intent(this,MainActivity::class.java) var pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT) notiBuilder.contentIntent = pendingIntent notId = notId + 1 notiManager.notify(notId,notiBuilder) Log.e("JK-->>", "Entered in geofence") Log.e("JK-->>", "Exit from geofence") } }} 

我也检查过,当设备通过放置调试点进入或离开地理围栏时,我的服务被调用。 没有对象获得空值,一切正常,但通知不会收到。 我能怎么做??

One Solution collect form web for “如何使用Kotlin从Android中的IntentService发送通知”

您需要在通知中添加图标,否则您的通知将被触发,但不会显示在状态栏上。

但为什么? 因为它是android操作系统的最低要求之一,在Required notification contents下显示通知

通知对象必须包含以下内容

A small icon, set by setSmallIcon()

标题,由setContentTitle()设置。

细节文本,由setContentText()设置。

在Android 8.0(API级别26)及更高版本上,创建一个有效的通知通道ID,由setChannelId()设置或在创建通道时在NotificationCompat.Builder构造函数中提供。

 var notification = NotificationCompat.Builder(applicationContext) .setAutoCancel(true) .setContentTitle("Entered In Geofence!") .setContentText("Click here for return to app!!") .setSmallIcon(R.drawable.notificationDra‌​wableResource) // add ^^^^^^^ .setContentIntent(pendingIntent).build() 

注意:根据棒棒糖的标准,你的通知图标应该是透明的,你可以使用setColor来设置背景颜色,但你必须把一个支票调用setColor为Android操作系统

Notification bar icon turns white in Android 5 Lollipop

  • Kotlin:如何修改一对值?
  • 简化在Kotlin中添加和替换碎片
  • 在Kotlin的BroadcastReceiver不起作用
  • 使用Gradle编译Kotlin jar时,在META-INF中生成无效的元数据
  • 具有派生属性的Kotlin数据类
  • 什么是最好的方式kotlin空对象的toString()方法返回一个空字符串,而不是“空”
  • 如何从第一个可观察到的东西获得排放值
  • TornadoFX:允许将一个项目从一个列表视图复制到剪贴板
  • Kotlin的访问修饰符是否和Java中的一样?
  • 如何在Kotlin Android中为数据类创建空构造函数
  • 如何在jna中实现一个联合类型的结构sizeof()
  • Kotlin language will be the best programming language for Android.