ブロードキャストを受信してアクティビティで処理をしたい人向け
アクティビティにブロードキャストレシーバーで情報をやりとりする方法。
受診する側のアクティビティでは内部クラスでBroadcastReceiverを継承するクラスを作りonReceiveをオーバーライドし、その中身で実行する処理を記述しておく。innerにすることで、親のクラスのメンバの数値へもアクセスすることがでぎるので、ブロードキャストを受診して、中身を判断して、それで処理を振り分けることができる。
内部クラスはonCreateでregisterReceiverで登録する必要がある。マニフェストの登録でも可能だが、暗黙的インテントのブロードキャストはoreo以降、事実上禁止されているため、このように動的に設定する必要がある。
アクティビティにブロードキャストレシーバーで情報をやりとりする方法。
受診する側のアクティビティでは内部クラスでBroadcastReceiverを継承するクラスを作りonReceiveをオーバーライドし、その中身で実行する処理を記述しておく。innerにすることで、親のクラスのメンバの数値へもアクセスすることがでぎるので、ブロードキャストを受診して、中身を判断して、それで処理を振り分けることができる。
内部クラスはonCreateでregisterReceiverで登録する必要がある。マニフェストの登録でも可能だが、暗黙的インテントのブロードキャストはoreo以降、事実上禁止されているため、このように動的に設定する必要がある。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//BroadcastReceiverを継承したクラスを指定する。
//IntentFilterは呼び出しの判断のようなもの NULLPOで呼ばれたものを受信する
registerReceiver(MyReceiver2(), IntentFilter("NULLPO"))
val btnIntentNoResult: Button = findViewById(R.id.btnIntentNoResult)
btnIntentNoResult.setOnClickListener {
val intent: Intent = Intent(this, SubActivity::class.java)
startActivity(intent)
}
}
//ブロードキャストを受信する内部クラス ここで受信してintentの内容に従って処理を振り分ける
inner class MyReceiver2 : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Toast.makeText(context, "がっ", Toast.LENGTH_LONG).show()
}
}
}
送信する側では下記のように通常のようにブロードキャストを送信する。
class SubActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sub)
val btnReceiver: Button = findViewById(R.id.btnFinishBroadcast)
btnReceiver.setOnClickListener {
//intentのアクションをNULLPOで作成する これは受信元で設定した文字列と同じ
val intent: Intent = Intent("NULLPO")
//ブロードキャストの受信
sendBroadcast(intent)
finish()
}
}
}