如何使用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

  • 如何编译使用hamcrest的Kotlin单元测试代码是'
  • 在Kotlin中,我如何习惯性地访问可空的嵌套地图值,或者返回一个默认值?
  • 处理codecov覆盖率报告时出错
  • Lambda在多个类型的对象表达式中
  • Kotlin,JPA和布尔字段
  • 从另一个Kotlin函数返回一个递归函数
  • 无法导入swig生成的包
  • 为lambda参数类型输入推断
  • Android Studio在Kotlin第二次编译之前不会编译更改
  • Kotlin泛型方法和继承
  • 在子构造函数中初始化抽象类字段
  • Kotlin language will be the best programming language for Android.