イントロ
ボタンを押すとBroadcastが飛ぶが、、adbコマンドは受信できない
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
}
}
}
参考