У меня есть три вида и один вид деятельности. MainActivity – MainController – PushedController – NotificationOpenController.
MainController содержит кнопку, при нажатии на нее поступает содержимое черного ящика, и устройство получает уведомление в лотке уведомлений.
Когда кликнуто уведомление, я хочу, чтобы поведение было таким, как будто
router.pushController(RouterTransaction.with(NotificationOpenController(bundle)) .pushChangeHandler(VerticalChangeHandler()) .popChangeHandler(VerticalChangeHandler()))
только что произошло.
Любые советы или изменения, связанные с Kotlin, оцениваются по мере того, как я делаю это, чтобы изучить язык
Я не знал, как правильно это сделать через намерения, возможно, трансляцию? но после некоторых проб и ошибок мой код теперь выглядит так:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) App.graph.inject(this) setContentView(R.layout.activity_main_kotlin) Log.d(TAG,"${FirebaseInstanceId.getInstance().getToken()}") router = Conductor.attachRouter(this, controller_container, savedInstanceState) val startingIntent : Intent? = intent if(startingIntent?.extras != null){ transitionToNotificationOpenController(startingIntent?.extras) } else{ if (!router.hasRootController()) { router.setRoot(RouterTransaction.with(MainController())); } } } override fun onBackPressed() { if (!router.handleBack()) { super.onBackPressed() } } fun transitionToNotificationOpenController(bundl: Bundle?){ router.pushController(RouterTransaction.with(NotificationOpenController(bundl)) .pushChangeHandler(VerticalChangeHandler()) .popChangeHandler(VerticalChangeHandler())) }
Представление «Уведомление» построено следующим образом:
val builder = NotificationCompat.Builder(this).setContentTitle("Title").setContentText("Text") val notificationIntent = Intent(this, MainActivity::class.java) notificationIntent.putExtra("message",messageBody) val contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT) ... manager.notify(1,builder.build())
Тем не менее, используя этот подход, анимация становится неправой, и пользователь может видеть только «типичное» всплывающее представление после загрузки некоторых или запуска нового действия, поскольку при нажатии уведомления появляется уведомление о деятельности, а затем действие Пауза -> Действие Возобновите работу после нажатия на кнопку.
Достигнут желаемый результат.
<activity android:name=".ui.MainActivity" android:launchMode="singleTop" >
Основная деятельность:
override fun onResume(){ super.onResume() val bundle : Bundle? = intent.extras if (bundle != null){ transitionToNotificationOpenController(bundle) } } /** * MainActivity is defined in AndroidManifest.xml as android:launchMode="singleTop" * onNewIntent acts as an entrypoint whenever an intent is received pointing to MainActivity, * since we don't want to launch a new instance of the Activity. * (because we want to keep the stack of RouterTransactions) */ override fun onNewIntent(intent : Intent){ setIntent(intent) }