0

ここで説明したことと同様のことをしています: アクティビティ内の Android BroadcastReceiver

UI の有無にかかわらず実行されるアプリケーションがあります。画面がオフのときは、バックグラウンドで動作しています。UI がオンで表示されている場合 - 何かが起こったことをユーザーに知らせたいと思います。

そのため、上記のトピックのサンプルに従い、 でブロードキャスト レシーバーを登録しましたActivity。登録onResumeおよび登録解除onPause

private BroadcastReceiver uiNeedToBeUpdatedReceiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            // TODO Auto-generated method stub
            Toast.makeText(BaseActivity.this, "received", Toast.LENGTH_LONG);
        }
    };

@Override
    protected void onPause()
    {
        Log.d(LOG_TAG, "onPause");
        super.onPause();

        // TODO: Unregister broadcast receiver
        unregisterReceiver(uiNeedToBeUpdatedReceiver);
    }

@Override
    protected void onResume()
    {
        Log.d(LOG_TAG, "onResume");
        super.onResume();

        // TODO: Register for broadcast events
        IntentFilter filter = new IntentFilter();
        filter.addAction("com.my.uineedtobeupdated");
        registerReceiver(uiNeedToBeUpdatedReceiver, filter);

バックグラウンドで実行される私の中で、AsyncTask私はこれを行います:

// Send broadcast - if UI active it will see it:
        Intent broadcast = new Intent();
        broadcast.setAction("com.my.uineedtobeupdated");
        MyApplication.Me.sendBroadcast(broadcast);

まあ、すべてがうまくいきます。ブロードキャストを受信すると、Toast が表示すべき行にヒットしていることをデバッガーで確認できます。しかし、トーストがポップアップ表示されません。

そのスレッドの問題ですか?ブロードキャストを受信した場合、UI スレッド上にある必要がありますか? なぜこの動作を観察するのですか?

4

2 に答える 2

11

トーストを作成するだけでなく、実際に表示することが重要です。簡単な方法:

Toast.makeText(BaseActivity.this, "received", Toast.LENGTH_LONG).show();

もちろん、次のこともできます。

Toast myToast = Toast.makeText(BaseActivity.this, "received", Toast.LENGTH_LONG);
myToast.show();
于 2012-06-01T20:36:21.133 に答える
2
Toast.makeText(BaseActivity.this, "received", Toast.LENGTH_LONG);

を作成してToastいますが、表示していません。次のように呼び出す必要がありますshow

Toast.makeText(BaseActivity.this, "received", Toast.LENGTH_LONG).show();
于 2012-06-01T20:36:52.423 に答える