ウェブアプリケーション,インジェクション,コマンドインジェクション

androidアプリケーション開発の基本

Broadcastを送受信する

Sending and Receving Broadcasts

Androidでは、broadcastは開発しているアプリケーションの
(関係の無い他のアプリケーションでも可能)
他の部分にメッセージを送らせてくれます。
メッセージを送ることで起こっているなにかの情報をアプリケーションに
伝えることができます。
ここではbroadcastの内容を理解するbroadcastレシーバと同じように、
他のアプリケーションにbroadcastを送るコードを作ります。
broadcastレシーバを作るには2つの方法が有ります。
コードを通してプログラムに従って行うことと、
AndroidManifest.xml経由で記述する方法です。
それぞれのやり方の解決法を以下に示します。

まずbroadcastレシーバをプログラムに従って登録させていく方法です。

以下のアクティビティを考えます。

package net.learn2develop.usingbroadcastreceiver;

import android.app.Activity;
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.Toast;

public class MainActiviry extends Activity{
   MyBroadcastReceiver myReceiver;
   IntentFilter intentFilter;

   @Override
   public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_mail);

     myReceiver = new MyBroadcastReceiver();
     intentFilter = new IntentFilter("MY_SPECIFIC_ACTION");
   }

   @Override
   public void onResume(){
     super.onResume();
     //---register the receiver---
     registerReceiver(myReceiver, intentFilter);
   }

   @Override
   public void onPause(){
     super.onPause();
     //---unregister the receiver---
     unregisterReceiver(myReceiver);
   }

   public void onClick(View view){
     Intent i = new Intent("MY_SPECIFIC_ACTION");
     i.putExtra("key", "some value from intent");
     sendBroadcast(i);
   }

   public class MyBroadcastReceiver extends BroadcastReceiver{
     @Override
     public void onReceive(Context context, Intent i){
       Toast.makeText(context,
         "Received broadcast in MyBroadcastReceiver, " +
         " value received: " + i.getStringExtra("key"),
         Toast.LENGTH_LONG).show();
     }
   }
}

このコードは内部クラスBroadcastReceiverを元にしたクラスを拡張した
MyBroadcastReceiverを使っています。
このクラスでは、broadcastを受け取ったときのために
onReceive()メソッドを無効にする必要があり、
動かしたい動作を行うことができます。
レシーバに渡すデータを得るためには、
onReceive()メソッドの二番目にあるIntentオブジェクトを使用します。
このMyBroadcastReceiverクラスを使うためには、
IntentFilterオブジェクトを作るのと同じように、
このクラスの実例を作る必要があります。
myReceiver = new MyBroadcastReceiver();
intentFilter = new IntentFilter("MY_SPECIFIC_ACTION");
IntentFilterコンストラクタのユーザ定義された動作を指定し、
この動作を定義するために開発者自身の文字列を使います。
BroadcastReceiverオブジェクトを登録するために、
registerReceiver()メソッドを使い、IntentFilterオブジェクトと同じように
BroadcastReceiverオブジェクトを渡します。
registerReceiver(myReceiver, intentFilter);
BroadcastReceiverオブジェクトを登録してあれば、
broadcastの送信が働くかどうかをテストすることができます。
broadcastを送信するためには、sendBroadcastメソッドを使い、
Intentオブジェクトを渡します。
public void onClick(View view){
   Intent i = new Intent("MY_SPECIFIC_ACTION");
   i.putExtra("key", "some value from intent");
   sendBroadcast(i);
}
もし、レシーバにデータを渡したいとしたら、
putExtra()メソッドを使います。
broadcastレシーバを登録させないためには、
unregisterReceiver()メソッドを使います。
unregisterReceiver(myReceiver);
これでbroadcastが他のアプリケーションからのものだとしても、
broadcastレシーバは狙い通り動きます。

次にAndrooidManifest.xmlファイルでの
BroadcastReceiverを登録させます。

broadcastレシーバをプログラムに従って登録する方法では、
もし、アプリケーションがバックグラウンドで走っているときには、
broadcastが登録されていないためbroadcastレシーバは
まるで働きません。
@Override
public void onPause(){
   super onPause();
   //---unregister the receiver---
   unregisterReceiver(myReceiver);
}
もし持続的にbroadcastを受け取りたいと考えるならば、
AndroidManifest.xmlファイルにBroadcastReceiverクラスを
登録する必要があります。
BroadcastReceiverクラスを登録するには、他のJavaクラスに
BroadcastReceiverクラスを作ります。
以下のコードはMySecondBroadcastReceiver.javaファイルの
内容になります。

package net.learn2develop.usingbroadcastreceiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MySecondBroadcastReceiver extends BroadcastReceiver{
   @Override
   public void onReceive(Context context, intent i){
     Toast.makeText(context,
       Received broadcast in MySecondBroadcastReceiver; " +
       " value received: " + i.getStringExtra("key"),
       Toast.LENGTH_LONG).show();
     }
   }

AndroidManifest.xmlファイルにこのレシーバを登録するためには、
<receiver>要素を加えます。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="net.learn2develop.usingbroadcastreceiver"
   android:versionCode="1"
   android:versionName="1.0" >

<uses-sdk
   android:minSdkVersion="8"
   android:targetSdkVersion="15" />

<applicaton
   android:icon="@drawable/ic_launcher"
   android:label="@string/app_name"
   android:theme="@style/AppTheme" >
   <activity
     android:name=".MainActivity"
     android:label="@string/title_activity_mail" >
     <intent-filter>
       <action android:name="android.intent.action.MAIN" />

       <category android:name="android.intent.category.LAUNCHER" />
     <intent-filter>
   <activity>

   receiver android:name=".MySecondBroadcastReceiver" >
     <intent-filter>
       <action android:name="MY_SPECIFIC_ACTION" />
     <intent-filter>
   receiver>
   <application>
<manifest>

このコードでBroadcastReceiverを2つ持つことになります。
1つはonResume()メソッドにプログラムに従って登録されるもので、
もう1つは、AndrooidManifest.xmlでの登録になります。
もし、Broadcastを今送信したら、両方のレシーバが呼び出されます。

ホーム
便利堂ロゴ
inserted by FC2 system