Как запустить код при возобновлении действия после жеста возврата из другого действия в WearOS? - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть три действия

  1. MainActivity
  2. StartActivity
  3. EndActivity

Когда приложение загружается, открывается MainActivty, есть две кнопки, называемые Start и End. Нажатие на Start приводит к StartActivity, а End - к ​​EndActivity. Из обоих этих действий я могу вернуться к MainActivity. Я хочу выполнить код в MainActivity, когда другие удаляются и обнаруживается MainActivity.

До сих пор я пробовал события OnResume и OnRestart безуспешно. Пожалуйста, предложите что-нибудь, что я могу попробовать?

Обратите внимание: меня не интересует действие, из которого я возвращаюсь. Выполнять код нужно только при возобновлении MainActivity.

MainActivity

class MainActivity : WearableActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val btnStart = findViewById(R.id.btnStartActivity) as Button
        btnStart.setOnClickListener{
            //Toast.makeText(this@MainActivity, "You clicked me.", Toast.LENGTH_SHORT).show()
            val intent = Intent(this@MainActivity, StartActivity::class.java)
            startActivity(intent)
        }



        val btnEnd = findViewById(R.id.btnEndActivity) as Button
        btnEnd.setOnClickListener{
            //Toast.makeText(this@MainActivity, "You clicked me.", Toast.LENGTH_SHORT).show()
            val intent = Intent(this@MainActivity, EndActivity::class.java)
            startActivity(intent)
        }
        // Enables Always-on
        setAmbientEnabled()
    }

    fun onRestart(savedInstanceState: Bundle?) {
        super.onRestart();
        val btnStart = findViewById(R.id.btnStartActivity) as Button
        btnStart.text = MyApplication.Companion.g_hour_start.toString() +":" + MyApplication.Companion.g_min_start.toString()

    }

}

StartActivity

class StartActivity : WearableActivity() {



    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_start)
        val pickerStart = findViewById(R.id.timePickerStart) as TimePicker

        pickerStart.setIs24HourView(true)
        pickerStart.setHour(MyApplication.Companion.g_hour_start)
        pickerStart.setMinute(MyApplication.Companion.g_min_start)

        pickerStart.setOnTimeChangedListener(TimePicker.OnTimeChangedListener { view, hourOfDay, minute ->
            MyApplication.Companion.g_hour_start = hourOfDay
            MyApplication.Companion.g_min_start =minute

        })

        // Enables Always-on
        setAmbientEnabled()
    }
    override fun onBackPressed() {
        // TODO Auto-generated method stub
        super.onBackPressed()
        finish()
    }
}

EndActivity аналогично StartActivity

Ссылка на Код: Макет и код

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Я получил код для работы. Но не уверен, что это правильный путь.

Запись экрана приложения - Запись экрана TimeDifference

MainActivity

class MainActivity : WearableActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        //Log.d(TAG,"onCreate: called")
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        MyApplication.Companion.g_hour_start =0
        MyApplication.Companion.g_min_start = 0
        MyApplication.Companion.g_hour_end =0
        MyApplication.Companion.g_min_end = 0

        val btnStart = findViewById(R.id.btnStartActivity) as Button
        btnStart.setOnClickListener{
            //Toast.makeText(this@MainActivity, "You clicked me.", Toast.LENGTH_SHORT).show()
            val intent = Intent(this@MainActivity, StartActivity::class.java)
            startActivity(intent)
        }


        val btnEnd = findViewById(R.id.btnEndActivity) as Button
        btnEnd.setOnClickListener{
            //Toast.makeText(this@MainActivity, "You clicked me.", Toast.LENGTH_SHORT).show()
            val intent = Intent(this@MainActivity, EndActivity::class.java)
            startActivity(intent)
        }
        // Enables Always-on
        setAmbientEnabled()
    }

    override fun onResume() {
        //Log.d(TAG,"onResume: called")
        super.onResume();
        val btnStart = findViewById(R.id.btnStartActivity) as Button
        val btnEnd = findViewById(R.id.btnEndActivity) as Button
        val txtCalc = findViewById(R.id.txtResult) as TextView
        val StartHour = MyApplication.Companion.g_hour_start
        val StartMin = MyApplication.Companion.g_min_start
        val EndHour = MyApplication.Companion.g_hour_end
        val EndMin = MyApplication.Companion.g_min_end
        val DifferenceMinutes : Int
        val DiffHour : Int
        val DiffMin : Int

        if (StartHour + StartMin !=  0 ) {
            btnStart.text =
                StartHour.toString().padStart(2,'0') + ":" + StartMin.toString().padStart(2,'0')

        }

        if (EndHour + EndMin !=  0 ) {
            btnEnd.text =
                EndHour.toString().padStart(2,'0') + ":" + EndMin.toString().padStart(2,'0')

        }
        if (StartHour + StartMin !=  0 &&
            EndHour + EndMin !=  0 ){
            //txtCalc.textSize = 20f
            var TotalStartMinutes = StartHour * 60 + StartMin
            var TotalEndMinutes = EndHour * 60 + EndMin
            if(TotalEndMinutes> TotalStartMinutes) {
                DifferenceMinutes = TotalEndMinutes - TotalStartMinutes
            }else{
                DifferenceMinutes = TotalStartMinutes - TotalEndMinutes
            }
            DiffHour = DifferenceMinutes / 60
            DiffMin = DifferenceMinutes % 60

            if (DiffHour == 0 && DiffMin == 0){
                txtCalc.text = "No Difference!!"
            }else if (DiffHour == 0){
                txtCalc.text = "$DiffMin m"
            } else if(DiffMin == 0){
                txtCalc.text = "$DiffHour h"
            } else{
                txtCalc.text = "$DiffHour h and $DiffMin m"
            }
        }
    }
}

StartActivity

class StartActivity : WearableActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_start)
        val pickerStart = findViewById(R.id.timePickerStart) as TimePicker

        pickerStart.setIs24HourView(true)
        pickerStart.setHour(MyApplication.Companion.g_hour_start)
        pickerStart.setMinute(MyApplication.Companion.g_min_start)

        pickerStart.setOnTimeChangedListener(TimePicker.OnTimeChangedListener { view, hourOfDay, minute ->
            MyApplication.Companion.g_hour_start = hourOfDay
            MyApplication.Companion.g_min_start =minute

        })

        // Enables Always-on
        setAmbientEnabled()
    }
}

Для глобальных переменных

class MyApplication : Application() {
    companion object {
        var g_hour_start = 0
        var g_min_start = 0
        var g_hour_end = 0
        var g_min_end = 0
    }
    override fun onCreate() {
        super.onCreate()
        // initialization code here
    }
}

EndActivity аналогична StartActivity

Код и схема для приложения WearOS

0 голосов
/ 10 февраля 2020

Если вы запустите StartActivity и EndActivity, используя

startActivityForResult (Intent intent, int requestCode)

, вы получите обратный вызов, как только они закончатся sh (то есть отклонены пользователем и вернутся в MainActivity)

onActivityResult (int requestCode, int resultCode, Intent data)

Поскольку вы не заботитесь об активности, которую вы возвращаете, вы можете игнорировать большинство аргументов и просто выполнить код, необходимый для запуска.

Более подробную информацию можно найти в официальной документации .

...