private boolean connect(WifiConfiguration config) {
   mWifiManager.startScan();
   for (ScanResult result : mWifiManager.getScanResults()) {
     // Android4.2以降のダブルクォーテーションを除去
     LogUtils.i("config.SSID: " + getSsidName(config.SSID));
     LogUtils.i("result.SSID: " + getSsidName(result.SSID));
     if (getSsidName(config.SSID).equals(getSsidName(result.SSID))) {
       return mWifiManager.enableNetwork(config.networkId, true);
     }
   }
   return false;
 }
 public boolean detectShake(float x, float y, float z) {
   boolean isShaked = false;
   // シェイク時間のチェック
   long now = System.currentTimeMillis();
   if (mLastTime == 0) {
     mLastTime = now;
   }
   // SHAKE_TIMEOUT までに次の加速を検知しなかったら mShakeCount をリセット
   if (now - mLastAccel > SHAKE_TIMEOUT) {
     mShakeCount = 0;
   }
   // 速度を算出する
   long diff = now - mLastTime;
   float speed = Math.abs(x + y + z - mLastX - mLastY - mLastZ) / diff * 10000;
   LogUtils.d("speed: " + speed);
   if (speed > SPEED_THRESHOLD) {
     // mShakeCount の加算、SHAKE_COUNT を超えているかのチェック
     // 最後のシェイク時間から SHAKE_DURATION 経過しているかチェック
     if (++mShakeCount >= SHAKE_COUNT && now - mLastShake > SHAKE_DURATION) {
       mLastShake = now;
       mShakeCount = 0;
       isShaked = true;
     }
     // SPEED_THRESHOLD を超える速度を検出した時刻をセット
     mLastAccel = now;
   }
   mLastTime = now;
   mLastX = x;
   mLastY = y;
   mLastZ = z;
   return isShaked;
 }