使用 Intent啟動Activity 、啟動Service 以及發(fā)送廣播等場景
顯式 Intent
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
隱式 Intent
Intent指定 action和category由系統(tǒng)去分析找出合適的Activity去啟動
只有<action>和<category>中的內(nèi)容同時匹配Intent 中指定的action和category時,這個Activity 才能響應(yīng)該Intent 。
val intent = Intent("com.example.activitytest.ACTION_START")
intent.addCategory("com.example.activitytest.MY_CATEGORY")
startActivity(intent)
傳值
傳值:intent.putExtra("extra_data", data)
取值:val extraData = intent.getStringExtra("extra_data")
反向傳值
1.用startActivityForResult()方法來啟動SecondActivity,startActivityForResult()方法接收兩個參數(shù):第一個參數(shù)還是Intent ;第二個參數(shù)是請求碼,用于在之后的回調(diào)中判斷數(shù)據(jù)的來源。
val intent = Intent(this, SecondActivity::class.java)
startActivityForResult(intent, 1)
2.在SecondActivity 構(gòu)建了一個Intent 用于傳遞數(shù)據(jù)。把要傳遞的數(shù)據(jù)存放在Intent中,然后調(diào)用了setResult()方法。這個方法專門用于向上一個Activity返回數(shù)據(jù)。setResult()方法接收兩個參數(shù):第一個參數(shù)用于向上一個Activity 返回處理結(jié)果,一般只使用RESULT_OK或RESULT_CANCELED這兩個值;第二個參數(shù)則把帶有數(shù)據(jù)的Intent 傳遞回去。最后調(diào)用了finish()方法來銷毀當(dāng)前Activity 。
val intent = Intent()
intent.putExtra("data_return", "Hello FirstActivity")
setResult(RESULT_OK, intent)
finish()
- 在
FirstActivity中重寫onActivityResult()來得到返回的數(shù)據(jù)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
1 -> if (resultCode == RESULT_OK) {
val returnedData = data?.getStringExtra("data_return")
Log.d("FirstActivity", "returned data is $returnedData")
}
}
}