Чтение выбранной опции удаленного ввода с носимого устройства kotlin Android
У меня есть приложение, которое расширяет поддержку носимых уведомлений. Он использует удаленный ввод для перечисления массива желаемых ответов.
Необходимо прослушивать действие щелчка на элементе удаленного ввода на носимом устройстве. Намерение зафиксировано в
onNewIntent(intent: Intent?)
похоже, не содержал требуемой информации.
val intent = Intent(this, SplashActivity::class.java).apply {
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
}
val pendingIntent = PendingIntent.getActivity(
this,
Random.nextInt(), intent,
PendingIntent.FLAG_UPDATE_CURRENT
)
val replyActionPendingIntent: PendingIntent
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val intent = Intent(this, WearNotificationService::class.java)
intent.action = WearNotificationService.ACTION_REPLY
replyActionPendingIntent = PendingIntent.getService(this, 0, intent, 0)
} else {
replyActionPendingIntent = pendingIntent
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationChannel =
NotificationChannel(CustomFirebaseMessagingService.CHANNEL_ID,
CustomFirebaseMessagingService.CHANNEL_NAME,
CustomFirebaseMessagingService.CHANNEL_IMPORTANCE_HIGH)
val notificationManager =
this.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(notificationChannel)
val alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
val remoteInput = resources.getString(R.string.reply_label).let { replyLabel ->
resources.getStringArray(R.array.reply_choices).let { replyChoices ->
RemoteInput.Builder(WearNotificationService.ACTION_REPLY)
.setLabel(replyLabel)
.setChoices(replyChoices)
.build()
}
}
val action = NotificationCompat.Action.Builder(
R.drawable.logo,
getString(R.string.reply_label),
pendingIntent
)
.addRemoteInput(remoteInput)
.setAllowGeneratedReplies(false)
.build()
val notificationBuilder = NotificationCompat.Builder(this,
CustomFirebaseMessagingService.CHANNEL_ID)
.setContentTitle(getString(R.string.app_name))
.setContentText(body)
.setAutoCancel(true)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(replyActionPendingIntent)
.setColorized(true)
.setDefaults(NotificationCompat.DEFAULT_LIGHTS and NotificationCompat.DEFAULT_VIBRATE)
.setSound(alarmSound, AudioManager.STREAM_MUSIC)
.extend(NotificationCompat.WearableExtender().addAction(action))
notificationManager.notify(0, notificationBuilder.build())
}
Также создан сервис для наблюдения за удаленным вводом
class WearNotificationService : JobIntentService() {
override fun onHandleWork(intent: Intent) {
print(intent)
}
companion object {
const val ACTION_REPLY = "com.example.android.wearable.wear.wearnotifications.handlers.action.REPLY"
const val EXTRA_REPLY = "com.example.android.wearable.wear.wearnotifications.handlers.extra.REPLY"
}
}
Также добавьте информацию в AndroidManifest
<service android:name=".push_service.WearNotificationService" />
Но при ответе с носимого устройства не смог получить подробности действия. Образец на пульте дистанционного ввода в официальной документации , как представляется, в Java и koltin преобразование бросает предупреждение устаревания.