0

У меня есть три вида и один вид деятельности. MainActivity - MainController - PushedController - NotificationOpenController.Как справиться с намерениями с Kotlin и проводником

MainController содержит кнопку, при нажатии на нее наносится черный ящик, и устройство получает уведомление в лотке уведомлений.

Когда уведомление щелкнул, я хочу, чтобы поведение, как будто

router.pushController(RouterTransaction.with(NotificationOpenController(bundle)) 
      .pushChangeHandler(VerticalChangeHandler()) 
      .popChangeHandler(VerticalChangeHandler())) 

только что произошло.

связанные Любые Котлины советов или изменения оценены, как я делаю это, чтобы выучить язык

Я не был уверен, как добиться этого в надлежащем порядке через намерения, возможно, трансляция? но после нескольких проб и ошибок мой код теперь выглядит следующим образом:

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()) 

Однако, используя этот подход, анимация получает все неправильно, и пользователь может только см. «типичное» всплывающее представление после загрузки какого-либо или запуска нового действия , так как при нажатии уведомления появляется уведомление о деятельности, а затем действие «Пауза» -> «Операция возобновления» после нажатия на подставку.

ответ

1

Достигнутый желаемый результат.

<activity android:name=".ui.MainActivity" 
     android:launchMode="singleTop" 
     > 

MainActivity:

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) 
} 
Смежные вопросы