ブロードキャストを受信してアクティビティで処理をしたい人向け

 アクティビティにブロードキャストレシーバーで情報をやりとりする方法。
 受診する側のアクティビティでは内部クラスで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()
        }
    }
}