- Android
- 2011-11-10 - 更新:2012-04-12
この記事は最終更新日から1年以上経過しています。
IntentServiceでバックグラウンドにて処理を実行し、
完了の通知を受け取るにはブロードキャストレシーバーを使用して実現できます。
IntentFilterとBroadcastReceiverを使って、アクティビティとサービス間で通信します。
IntentServiceを利用するためのマニフェストへの記述
<application ...> <service android:name="MyIntentService"></service> </application>
まずは、アクティビティ
[HelloActivity.java]
import android.app.Activity; import android.os.Bundle; import android.content.Intent; import android.content.IntentFilter; import android.content.BroadcastReceiver; public class HelloActivity extends Activity { IntentFilter intentFilter; MyBroadcastReceiver receiver; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); startService(new Intent(getBaseContext(), MyIntentService.class)); receiver = new MyBroadcastReceiver(); intentFilter = new IntentFilter(); intentFilter.addAction("MY_ACTION"); registerReceiver(receiver, intentFilter); } }
次に、IntentServiceクラス
[MyIntentService.java]
import android.app.IntentService; import android.content.Intent; import android.os.Handler; import android.util.Log; import android.widget.Toast; public class MyIntentService extends IntentService { final static String TAG = "MyIntentService"; private Handler mHandler; public MyIntentService(){ super("MyIntentService"); mHandler = new Handler(); } @Override protected void onHandleIntent(Intent intent) { Log.d(TAG, "onHandleIntent"); mHandler.post(new DisplayToast("サービスを開始しました。")); Intent broadcastIntent = new Intent(); broadcastIntent.putExtra( "message", "Hello, BroadCast!"); broadcastIntent.setAction("MY_ACTION"); getBaseContext().sendBroadcast(broadcastIntent); } @Override public void onDestroy(){ super.onDestroy(); Log.d(TAG, "onDestroy"); } private class DisplayToast implements Runnable{ String mText; public DisplayToast(String text){ mText = text; } public void run(){ Toast.makeText(getApplicationContext(), mText, Toast.LENGTH_SHORT).show(); } } }
最後に、ブロードキャストレシーバーのクラス
[MyBroadcastReceiver.java]
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.widget.Toast; public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); String message = bundle.getString("message"); Toast.makeText( context, "onReceive! " + message, Toast.LENGTH_LONG).show(); } }
※このクラスは、メインアクティビティのクラス内に内部クラスとして定義してもかまいません。
17,757 views