LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-11-06

イントロ

ボタンを押すと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
        }

    }

}

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0