コマンド飛ばして処理させたい-BroadcastReceiver編


#イントロ
ボタンを押すとBroadcastが飛ぶが、、adbコマンドは受信できない
<img width=230 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547467/a383d7bb-f9b0-37bc-cb2f-033427f4f9ad.png">

adbコマンド

```
C:\Users\su5fi>adb -s 192.168.1.26:38233 shell am broadcast -a ORIGINAL_ACTION -es "d" "d"
Broadcasting: Intent { act=ORIGINAL_ACTION flg=0x400000 pkg=d (has extras) }
Broadcast completed: result=0
```


#環境
Windows10(64bit)
Android11


#

```AndroidManifest.xml
    <!-- ブロードキャストレシーバーと -->
    <uses-permission android:name="android.permission.SEND_SMS"/>

 <application
   略

        <!-- ブロードキャストレシーバーと受け取るアクション名「MY_INTENT」を登録 -->
        <receiver android:name=".MyBroadcastReceiver">
            <intent-filter>
                <action android:name="ORIGINAL_ACTION"/>
            </intent-filter>
        </receiver>
 </application>
```

```MainActivity.java
package com.example.testbroadcast;

import androidx.appcompat.app.AppCompatActivity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    MyBroadcastReceiver  myReceiver;
    IntentFilter intentFilter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        // レシーバーオブジェクトの生成
        myReceiver = new MyBroadcastReceiver(getBaseContext());

        // レシーバーが受信できるインテントを指定してインテントフィルターを生成
        intentFilter = new IntentFilter("ORIGINAL_ACTION");

        //レイアウトファイルのボタンに直にクリックイベントリスナーを設定
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // ブロードキャスト送信するインテントの種類を定義する
                Intent intent = new Intent("ORIGINAL_ACTION");
                // ブロードキャストにメッセージを付与する
                intent.putExtra("key", "message");
                // ブロードキャスト送信
                sendBroadcast(intent);
            }
        });


        // ブロードキャストレシーバーを登録する。（どんなインテントがきたらどのレシーバーをキックするかを定義づける）
        registerReceiver(myReceiver, intentFilter);

    }

}

```

```MyBroadcastReceiver.java
package com.example.testbroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MyBroadcastReceiver extends BroadcastReceiver {
    final String TAG = this.getClass().getSimpleName();
    private static MyBroadcastReceiver sInstance;

    private Context mContext;
    public MyBroadcastReceiver(Context context){
        mContext = context;
    }

    public static synchronized MyBroadcastReceiver getInstance(Context context){
        if(sInstance != null){
            return sInstance;
        }
        sInstance = new MyBroadcastReceiver(context);
        return sInstance;
    }

    // ブロードキャスト受信時にこのメソッドが動く
    @Override
    public void onReceive(Context context, Intent intent) {
        // ブロードキャスト受信時の処理（今回は適当）
        LayoutInflater inf = LayoutInflater.from(mContext);
        View infView = inf.inflate(R.layout.activity_main, null);
        TextView textViewMsg =  (TextView)infView.findViewById(R.id.textViewMsg);

        Bundle bundle = intent.getExtras();
        if(bundle.getString("key")!= null)
        {
            //送信されたブロードキャストを受信してトーストで表示
            Toast.makeText(context, "受信しました… "+bundle.getString("key"), Toast.LENGTH_SHORT).show();
            textViewMsg.setText("受信しました… "+bundle.getString("key"));
            Log.d(TAG, "受信しました… "+bundle.getString("key"));
            //TODO here get the string stored in the string variable and do
            // setText() on userName
        }

    }

}

```

#参考

https://qiita.com/kurodai0715/items/a7f6f8315b55a46b4fcc