WifiのON/OFFを切り替えるダイアログ(AlertDialog)のみのプログラムを作成する
Activityの透過設定
AndroidManifest.xml で透過設定を行う。xmlの赤字で示した部分が、透過テーマの設定。
また、青で示した部分はWifi機能にアクセスするための権限を与えている部分。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android_wifi_toggle" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent" > <activity android:name="com.example.android_wifi_toggle.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
EclipseのGUIから次のように設定しても良い
AlertDialog表示とWifi機能のON/OFF
青色の部分がWifi状態の取得と、ON/OFFトグル処理。緑色の部分は、AlertDialogで「もどる」ボタンが押された場合の処理。
MainActivity.java
package com.example.android_wifi_toggle; import android.os.Bundle; import android.view.KeyEvent; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.net.wifi.WifiManager; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Wifi状態を得る final WifiManager wifi = (WifiManager)getSystemService(WIFI_SERVICE); String button_string; // 「接続/切断」ボタンの文字列作成用 AlertDialog.Builder dlg = new AlertDialog.Builder(this); // dlg.setTitle("Wifi ON/OFF切替"); if(wifi.isWifiEnabled()){ dlg.setMessage("Wifiは現在 ON です"); button_string = "無効化(OFF)"; } else{ dlg.setMessage("Wifiは現在 OFF です"); button_string = "有効化(ON)"; } // Wifi 接続/切断 ボタン dlg.setPositiveButton(button_string, new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int which) { // Wifi状態の有効化/無効化処理 if(wifi.isWifiEnabled()) wifi.setWifiEnabled(false); else wifi.setWifiEnabled(true); finish(); // プログラムの終了 android.os.Process.killProcess(android.os.Process.myPid()); System.exit(1); }}); // キャンセル ボタン dlg.setNegativeButton("キャンセル", new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int which) { // プログラム終了 finish(); android.os.Process.killProcess(android.os.Process.myPid()); System.exit(1); }}); // AlertDialogでのキーのキャプチャ(戻るキーが押されたらプログラムを終了する) dlg.setOnKeyListener(new AlertDialog.OnKeyListener() { @Override public boolean onKey(DialogInterface arg0, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { // プログラム終了 finish(); android.os.Process.killProcess(android.os.Process.myPid()); System.exit(1); } return true; } }); dlg.show(); } // Activityのウインドウでのキーキャプチャ // (今回のソフトウエアでは、AlertDialogでキャプチャされるため、この関数は呼ばれることはない) @Override public boolean dispatchKeyEvent(KeyEvent event){ if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){ // 戻るボタンが押されたら、プログラムを終了する finish(); android.os.Process.killProcess(android.os.Process.myPid()); System.exit(1); } return super.dispatchKeyEvent(event); } }