Skip to content Skip to sidebar Skip to footer

Power Key Event In Android?

I want to listen to power key event. How can I do that? Currently the code I am using is this: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(KeyEvent

Solution 1:

Does it make a difference if you write

KeyEvent.KEYCODE_POWER == keyCode

? I think you should write this, and not

KeyEvent.KEYCODE_POWER == event.getKeyCode()

taken from here: How to hook into the Power button in Android?

Solution 2:

You should check in your override function onKeyDown

@OverridepublicbooleanonKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_POWER) {
        // Do something here...returntrue;
    }
    returnsuper.onKeyDown(keyCode, event);
}

and the same with onKeyLongPress if you using

Another way you would like to handle screen off, you can register BroadcastReceiver with action Intent.ACTION_SCREEN_OFF

Solution 3:

package app.test;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Environment;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.provider.Settings;
import android.util.Log;

publicclassTestextendsActivityimplementsSensorEventListener {
    privateWakeLockmWakelock=null;
  private SensorManager mMgr;
    private Sensor mAccel;
    private BufferedWriter mLog;
  finalprivateSimpleDateFormatmTimeFormat=newSimpleDateFormat("HH:mm:ss - ");
  privateint mSavedTimeout;

    @OverridepublicvoidonCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mMgr = (SensorManager) this.getSystemService(SENSOR_SERVICE);
        mAccel = mMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        try {
            Stringfilename= Environment.getExternalStorageDirectory().getAbsolutePath() +"/accel.log";
            mLog = newBufferedWriter(newFileWriter(filename, true));
        }
        catch(Exception e) {
          e.printStackTrace();
          finish();
        }

        PowerManagerpwrMgr= (PowerManager) this.getSystemService(POWER_SERVICE);
        mWakelock = pwrMgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Accel");
        mWakelock.acquire();

        try {
          mSavedTimeout = Settings.System.getInt(getContentResolver(), 
              Settings.System.SCREEN_OFF_TIMEOUT);
        }
        catch(Exception e) {
          mSavedTimeout = 120000;
        }
        Settings.System.putInt(getContentResolver(), 
            Settings.System.SCREEN_OFF_TIMEOUT, 5000);
    }

    publicBroadcastReceivermReceiver=newBroadcastReceiver() {
        publicvoidonReceive(Context context, Intent intent) {
            if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
                writeLog("The screen has turned off");
                mMgr.unregisterListener(Test.this);
                mMgr.registerListener(Test.this, mAccel,
                    SensorManager.SENSOR_DELAY_NORMAL);
            }
        }
    };
    @OverrideprotectedvoidonStart() {
        mMgr.registerListener(this, mAccel, SensorManager.SENSOR_DELAY_NORMAL);
        IntentFilterfilter=newIntentFilter(Intent.ACTION_SCREEN_OFF);
        registerReceiver(mReceiver, filter);
      super.onStart();
    }
    @OverrideprotectedvoidonStop() {
        mMgr.unregisterListener(this, mAccel);
        unregisterReceiver(mReceiver);
        try {
      mLog.flush();
    } catch (IOException e) {
    }
      super.onStop();
    }
    @OverrideprotectedvoidonDestroy() {
      try {
          mLog.flush();
          mLog.close();
      }
      catch(Exception e) {
      }
        Settings.System.putInt(getContentResolver(), 
                Settings.System.SCREEN_OFF_TIMEOUT, mSavedTimeout);
        mWakelock.release();
        super.onDestroy();
    }
  publicvoidonAccuracyChanged(Sensor sensor, int accuracy) {
  }
  publicvoidonSensorChanged(SensorEvent event) {
    writeLog("Got a sensor event: " + event.values[0] + ", " +
        event.values[1] + ", " + event.values[2]);
  }
  privatevoidwriteLog(String str) {
    try {
        Datenow=newDate();
        mLog.write(mTimeFormat.format(now));
      mLog.write(str);
      mLog.write("\n");
    }
    catch(IOException ioe) {
      ioe.printStackTrace();
    }
  }
}

Enjoyyyy

Post a Comment for "Power Key Event In Android?"