BLOG

Blitz Gateスタッフブログ

BLOG

Androidで別画面のイベントを取得する方法

書いた人:

Android , 技術  

android-notification

どうも、最近眠りが浅いゆんゆんです。

 

春に近づいているせいか、どうにも眠くてしょうがないです。

 

今回は、Androidで別画面からイベントを取得する方法を書いていこうと思います。
想定としては、別画面で発火されたイベントをうけて、さらに別の画面にそれを知らせる方法です。

 

【対象】
Android: 5.0, 6.0
検証: Galaxy s6, Nexus7

 

今回はAndroidの 「BroadcastReceiver」 という機能を使用していきます。
その中でも 「LocalBroadcastReceiver」 という分類のものです。

 

そのソースコードを記載していきます。
最低限の部分ですので、適宜読み替えてください。

 

[MainActivity.java]

import android.content.BroadcastReceiver;
import android.content.Intent;
import android.support.v4.content.LocalBroadcastManager;

public class MainActivity extends Activity {
    // ローカルブロードキャスト用キー定数
    public static final String BROADCAST_KEY_BUTTON = "TOUCH_BUTTON";
    private ButtonBroadcastReceiver buttonBroadcastReceiver = null;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        // ブロードキャストを設定
        if(this.buttonBroadcastReceiver == null) {
            // ローカルブロードキャスト用IntentFilterを生成
            IntentFilter intentFilter = new IntentFilter(MainActivity.BROADCAST_KEY_BUTTON);
            // ローカルブロードキャストを受け取るレシーバを設定
            this.buttonBroadcastReceiver = new ButtonBroadcastReceiver();
            // ローカルブロードキャストを設定
            LocalBroadcastManager.getInstance(this).registerReceiver(this.buttonBroadcastReceiver, intentFilter);
        }
    }

    public class ButtonBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            // ブロードキャストが呼ばれた時
            Log.d("TAG", "EVENT FIRE!!!");
        }
    }
}

[SubActivity.java]

import android.content.Intent;
import android.support.v4.content.LocalBroadcastManager;

// 場合によってはMainActivityをimportする
// import com.foo.bar.MainActivity;

public class SubActivity extends Activity {
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        this.button = (Button)findViewById(R.id.sendButton);
        this.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // ローカルブロードキャストを送信
                Intent localBroadCastIntent = new Intent(MainActivity.BROADCAST_KEY_BUTTON);
                LocalBroadcastManager.getInstance(this).sendBroadcast(localBroadCastIntent);
            }
        });
    }
}

 

コレだけです。
これで画面間でのイベントのお知らせを受け取ることが出来ます。

 

いかがでしたか?

 

AndroidはActivity間の繋がりが緩い(画面結合度が低い)ので、非常に作りやすいのですが、連携となると少し厄介ですね。
特に、パラメータの受け渡しには気をつけないと、予期せぬパラメータが来た際、アプリがクラッシュしてしまいます。
そのあたりにも気を配りながら開発していきましょう。

 

ではでは〜♪

  • このエントリーをはてなブックマークに追加