iPhoneでファイルダウンロードの際に嵌った話
のえる
2016.10.31
どうも、最近眠りが浅いのえるです。
春に近づいているせいか、どうにも眠くてしょうがないです。
今回は、Androidで別画面からイベントを取得する方法を書いていこうと思います。
想定としては、別画面で発火されたイベントをうけて、さらに別の画面にそれを知らせる方法です。
【対象】
Android: 5.0, 6.0
検証: Galaxy s6, Nexus7
今回はAndroidの 「BroadcastReceiver」 という機能を使用していきます。
その中でも 「LocalBroadcastReceiver」 という分類のものです。
そのソースコードを記載していきます。
最低限の部分ですので、適宜読み替えてください。
[MainActivity.java]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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間の繋がりが緩い(画面結合度が低い)ので、非常に作りやすいのですが、連携となると少し厄介ですね。
特に、パラメータの受け渡しには気をつけないと、予期せぬパラメータが来た際、アプリがクラッシュしてしまいます。
そのあたりにも気を配りながら開発していきましょう。
ではでは?♪
POPULAR
のえる
Full-stack Developer
人気記事