コード例 #1
0
  private static void beginShutdownSequence(Context context) {
    synchronized (sIsStartedGuard) {
      if (sIsStarted) {
        Log.d(TAG, "Shutdown sequence already running, returning.");
        return;
      }
      sIsStarted = true;
    }

    // throw up an indeterminate system dialog to indicate radio is
    // shutting down.
    ProgressDialog pd = new ProgressDialog(context);
    if (mReboot) {
      pd.setTitle(context.getText(com.android.internal.R.string.reboot_system));
      pd.setMessage(context.getText(com.android.internal.R.string.reboot_progress));
    } else {
      pd.setTitle(context.getText(com.android.internal.R.string.power_off));
      pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));
    }
    pd.setIndeterminate(true);
    pd.setCancelable(false);
    pd.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);

    pd.show();

    sInstance.mContext = context;
    sInstance.mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);

    // make sure we never fall asleep again
    sInstance.mCpuWakeLock = null;
    try {
      sInstance.mCpuWakeLock =
          sInstance.mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG + "-cpu");
      sInstance.mCpuWakeLock.setReferenceCounted(false);
      sInstance.mCpuWakeLock.acquire();
    } catch (SecurityException e) {
      Log.w(TAG, "No permission to acquire wake lock", e);
      sInstance.mCpuWakeLock = null;
    }

    // also make sure the screen stays on for better user experience
    sInstance.mScreenWakeLock = null;
    if (sInstance.mPowerManager.isScreenOn()) {
      try {
        sInstance.mScreenWakeLock =
            sInstance.mPowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, TAG + "-screen");
        sInstance.mScreenWakeLock.setReferenceCounted(false);
        sInstance.mScreenWakeLock.acquire();
      } catch (SecurityException e) {
        Log.w(TAG, "No permission to acquire wake lock", e);
        sInstance.mScreenWakeLock = null;
      }
    }

    // start the thread that initiates shutdown
    sInstance.mHandler = new Handler() {};
    sInstance.start();
  }
  private void performPendingShutdown() {
    final String shutdownAction = SystemProperties.get(ShutdownThread.SHUTDOWN_ACTION_PROPERTY, "");
    if (shutdownAction != null && shutdownAction.length() > 0) {
      boolean reboot = (shutdownAction.charAt(0) == '1');

      final String reason;
      if (shutdownAction.length() > 1) {
        reason = shutdownAction.substring(1, shutdownAction.length());
      } else {
        reason = null;
      }

      ShutdownThread.rebootOrShutdown(null, reboot, reason);
    }
  }