appWidgetで何か作りたくて。。
wifiの切り替えウィジェットなんてmarketを探せば腐るほどあるけど、どれを選んでいいのかわからない(それを調べるのも面倒)ので、実装してみた。
WifiService.java
package com.android.hoge.mannerswitcher; import android.app.PendingIntent; import android.app.Service; import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.Intent; import android.net.wifi.WifiManager; import android.os.IBinder; import android.util.Log; import android.widget.RemoteViews; public class WiFiService extends Service { private static final String WIFI_SWITCH_CLICK = "com.android.hoge.wifiswitcher.WiFiService.WIFI_SWITCH_CLICK"; @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); Log.d("Wifi-Switcher","WiFiService::onStart"); /** * サービス起動元の情報を取得 */ String activator = intent.getStringExtra("ServiceActivatorName"); Log.d("Wifi-Switcher","WiFiService::activator=" + activator); /** * ウィジェットのレイアウト情報をリモートビューに設定 */ RemoteViews remoteViews = new RemoteViews(getPackageName(),R.layout.widget); this.setRemoteViews(remoteViews); /** * Wi-Fiの切替機能実装 */ WifiManager wifi = (WifiManager)getSystemService(WIFI_SERVICE); if(wifi.isWifiEnabled()) { Log.d("Wifi-Switcher","NowWiFiStatus -----ON-----"); /** * WifiをOnからOffに */ wifi.setWifiEnabled(false); remoteViews.setImageViewResource(R.id.switch_btn, R.drawable.wifi_off); } else { Log.d("Wifi-Switcher","NowWiFiStatus -----OFF-----"); /** * WifiをOffからOnに */ wifi.setWifiEnabled(true); remoteViews.setImageViewResource(R.id.switch_btn, R.drawable.wifi_on); } /** * ウィジェットの更新 */ this.updateWidget(remoteViews); } @Override public IBinder onBind(Intent arg0) { return null; } /** * RemoteViewsオブジェクトのセットアップを実施 * * @param remoteViews */ public void setRemoteViews(RemoteViews remoteViews) { Intent intent = new Intent(WIFI_SWITCH_CLICK); PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0); remoteViews.setOnClickPendingIntent(R.id.switch_trigger, pendingIntent); } /** * ウィジェットの更新処理を実行します。 * * @param remoteViews */ private void updateWidget(RemoteViews remoteViews) { ComponentName thisWidget = new ComponentName(this, WidgetActivity.class); AppWidgetManager manager = AppWidgetManager.getInstance(this); manager.updateAppWidget(thisWidget, remoteViews); } }
これをウィジェット側のonUpdateでstartServiceすればok。
AndroidManifestの記述も忘れずに。
実装はとりあえずwifiを切り替えるだけ。(最終的にはSSIDのリストからwifiを選択できるようにしたい)
widgetの実装はちょっと調べればできるぐらい簡単でした。
※ちなみにエミュレータではWi-Fiをサポートしていないようです。