質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

4785閲覧

Android BroadcastReceiverのonReceiveが呼び出されません

tanuki_

総合スコア41

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2021/05/20 06:36

編集2021/05/20 07:01

問題:
BroadcastReceiverを使ってサービスとアクティビティー間で通信を行いたいのですが、onReceiveが呼び出されず受信できません。
実現しようとしている処理
MainActivityからServiceを呼び出しServiceからSecondActivityを呼び出す処理です。
通信はServiceとSecondActivityで行いServiceから何らかのメッセージを受信したらSecondActivityでfinish()を行いたいです。
現在の状況
onReceiveが呼び出されない為finish()出来ない状態です。

よろしくお願い致します。

MainActivity

1public class MainActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 Intent service = new Intent(getApplicationContext(), TestService.class); 9 startService(service); 10 } 11}

Service

1public class TestService extends Service { 2 @Override 3 public IBinder onBind(Intent intent) { 4 return null; 5 } 6 public int onStartCommand(Intent intent, int flags, int startId){ 7 intent = new Intent(getApplicationContext(), Overlay.class); 8 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 9 startActivity(intent); 10 sendMessage("こんにちは"); 11 stopSelf(); 12 return START_NOT_STICKY; 13 } 14 @Override 15 public void onCreate() { 16 17 super.onCreate(); 18 } 19 protected void sendMessage(String msg){ 20 Intent broadcast = new Intent(); 21 broadcast.putExtra("message", msg); 22 broadcast.setAction("DO_ACTION"); 23 getBaseContext().sendBroadcast(broadcast); 24 } 25} 26

SecondActivity

1public class Overlay extends Activity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.overlay); 7 8 //ブロードキャストレシーバの登録 9 // receiver 10 UpdateReceiver receiver = new UpdateReceiver(); 11 IntentFilter filter = new IntentFilter(); 12 filter.addAction("DO_ACTION"); 13 registerReceiver(receiver, filter); 14 15 } 16 17 protected class UpdateReceiver extends BroadcastReceiver { 18 @Override 19 public void onReceive(Context context, Intent intent) { 20 Bundle extras = intent.getExtras(); 21 String msg = extras.getString("message"); 22 finish(); 23 } 24 } 25} 26

AndroidStudio4.0.1
AndroidSDK7.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

startActivity の直後はまだ SecondActivity の準備ができてないので、しばらく経ってから sendMessage すれば良いと思います。

diff

1 startActivity(intent); 2- sendMessage("こんにちは"); 3- stopSelf(); 4+ new Handler().postDelayed(new Runnable() { 5+ @Override 6+ public void run() { 7+ sendMessage("こんにちは"); 8+ stopSelf(); 9+ } 10+ }, 3000); 11 return START_NOT_STICKY;

投稿2021/05/20 16:25

hoshi-takanori

総合スコア7901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tanuki_

2021/05/21 01:00

ありがとうございます。 やってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問