Как передать pendingInent в Intent.putExtra; чтобы начать PendingIntent с другого объекта

#android-studio #kotlin #android-activity #gson #android-pendingintent

#котлин #android-активность #gson #android-pendingintent

Вопрос:

Я пытаюсь запустить действие пользовательского интерфейса из службы NotificationListiner,затем в пользовательском интерфейсе, когда пользователь нажимает да: выполнить PendingIntent();иначе: завершить()

Я пытался достичь вышеуказанного с Dialog,AlertDialog помощью, но так NotificationListiner как это была фоновая служба, она не работала. Затем сделал новый Activity ;

Пробовал с Gson

SbnContainer.kt

 class SbnContainer {  lateinit var notification: Notification  lateinit var title: String  lateinit var desc: String  constructor(){  Log.d("TAG", "Salaam")  }  constructor(notification: Notification, title:String, desc:String){  this.notification = notification  this.title= title  this.desc = desc  } }   

Звоню Из NotificationService

 var i = Intent(this,CAlertWindow::class.java)  i.flags = Intent.FLAG_ACTIVITY_NEW_TASK  val gson = Gson()  var a = SbnContainer(sbn.notification, title, desc)  val myJson = gson.toJson(a)  i.putExtra("PACKAGE", myJson)  startActivity(i)  

Получение от CAlertWindow(AppCompatActivity)

 val gson = Gson()  val ob: SbnContainer = gson.fromJson(intent.getStringExtra("PACKAGE"), SbnContainer::class.java)  pendingIntent = ob.notification.contentIntent  alertWindowLayoutBinding.alrTitle.text = ob.title  alertWindowLayoutBinding.alrDesc.text = ob.desc  Log.d("Abdx79/AlertWindow", "In Alert Window")  alertWindowLayoutBinding.alrOpnB.setOnClickListener {  pendingIntent.send()  }  alertWindowLayoutBinding.alrDntB.setOnClickListener {  finish()  }   

Ошибка при вызове startActivity(i)

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.abdx79.notifications_manager/com.abdx79.notifications_manager.CAlertWindow}: java.lang.RuntimeException: Unable to invoke no-args constructor for interface java.lang.CharSequence. Registering an InstanceCreator with Gson for this type may fix this problem.  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3430)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3614)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199)  at android.os.Handler.dispatchMessage(Handler.java:112)  at android.os.Looper.loop(Looper.java:216)  at android.app.ActivityThread.main(ActivityThread.java:7625)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)  Caused by: java.lang.RuntimeException: Unable to invoke no-args constructor for interface java.lang.CharSequence. Registering an InstanceCreator with Gson for this type may fix this problem.  

Так как же я могу это решить??

Ответ №1:

Вы можете использовать Serializable для передачи объекта, такого как -gt;

 class Shop(  val name: String,  val details: String?,  val id: Int,  ):Serializable  

теперь передайте этот класс магазина, как

 var shop = Shop("name","details",1)  val intent = Intent(this, AnotherActivity::class.java).putExtra(  "SHOP",  shop   )  startActivity(intent)  

теперь получите этот класс магазина из другого занятия

 val shope = intent.getSerializableExtra("SHOP") as Shop  

вы также можете использовать Parcelable вместо Serializable

Комментарии:

1. я получаю эту ошибку при описанном выше подходе W/System.err: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.abdx79.notifications_manager.SbnContainer) at android.os.Parcel.writeSerializable(Parcel.java:1714) at android.os.Parcel.writeValue(Parcel.java:1662) at android.os.Parcel.writeArrayMapInternal(Parcel.java:875) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1583) W/System.err: at android.os.Bundle.writeToParcel(Bundle.java:1233)