/* DConnectMessageServiceProvider.java Copyright (c) 2014 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.message; import org.deviceconnect.message.intent.message.IntentDConnectMessage; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import java.util.logging.Logger; /** * Device Connectメッセージサービスプロバイダー. * * <p> * Device Connectリクエストメッセージを受信し、Device Connectレスポンスメッセージを送信するサービスである。 本インスタンスで処理をするのではなく、 * {@link #getServiceClass()} で返却した Service で応答処理を行う。 * * @param <T> サービスクラス * @author NTT DOCOMO, INC. */ public abstract class DConnectMessageServiceProvider<T extends Service> extends BroadcastReceiver { /** * ロガー. */ private Logger mLogger = Logger.getLogger("org.deviceconnect.dplugin"); @Override public void onReceive(final Context context, final Intent intent) { /** KeepAlive応答処理 */ if (intent.getAction().equals(IntentDConnectMessage.ACTION_KEEPALIVE)) { String status = intent.getStringExtra(IntentDConnectMessage.EXTRA_KEEPALIVE_STATUS); mLogger.info("ACTION_KEEPALIVE Receive. status: " + status); if (status.equals("CHECK") || status.equals("START") || status.equals("STOP")) { Intent response = MessageUtils.createResponseIntent(intent); response.setAction(IntentDConnectMessage.ACTION_KEEPALIVE); response.putExtra(IntentDConnectMessage.EXTRA_KEEPALIVE_STATUS, "RESPONSE"); response.putExtra(IntentDConnectMessage.EXTRA_SERVICE_ID, intent.getStringExtra(IntentDConnectMessage.EXTRA_SERVICE_ID)); context.sendBroadcast(response); mLogger.info("Send Broadcast."); } return; } Intent service = new Intent(intent); service.setClass(context, getServiceClass()); context.startService(service); } /** * サービスクラスを取得する. * * @return サービスクラス */ protected abstract Class<T> getServiceClass(); }