2015-04-04 6 views
0

Я написал программу андроида, в которой используется счетчик, который увеличивается при нажатии кнопки регулировки громкости. Также предполагается выключить экран, когда эта кнопка нажата, и подождите 5 секунд бездействия, прежде чем снова включить его. Но ничего не происходит, кроме счетчика, когда я запускаю приложение, т. Е. Экран не отключается.Отключить экран при нажатии кнопки громкости

Вот мой Java класс:

public class MainActivity extends Activity { 

private TextView counterTextView; 
int count; 

PowerManager.WakeLock wakeLock; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    counterTextView = (TextView) findViewById(R.id.counterTextView); 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // TODO Auto-generated method stub 

    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP && event.getRepeatCount() == 0) { 
     count++; 
     counterTextView.setText(" " + count + " "); 

     PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); 
     wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 
       "MyWakelockTag"); 
     wakeLock.acquire(); 

     new Handler().postDelayed(screenOnRunnable(), 5000); 

     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

private Runnable screenOnRunnable() { 
    return new Runnable() { 

     @Override 
     public void run() { 

      wakeLock.release(); 

     } 
    }; 
} 

} 

Я также добавил разрешение WAKE_LOCK в манифесте:

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

Я понятия не имею, что это неправильно ... любая помощь будет принята с благодарностью.

+0

Вы не передаете контекст и не используете при создании доступа к POWER_SERVICE. – Ali786

ответ

0

Существует несколько проблем с вашим кодом.

1. Вы используете неправильный wakelock

PowerManager.PARTIAL_WAKE_LOCK - Гарантирует, что процессор работает; screenand подсветка клавиатуры будет позволено уйти

вы должны использовать PowerManager.FULL_WAKE_LOCK для вашей цели, но это устаревший API, так что не является предпочтительным, и вместо того, чтобы теперь дни FLAG_KEEP_SCREEN_ON используется для той же цели.

2. Вы ожидаете, что устройство выключится сразу же через 5 секунд.

Этого не произойдет, потому что вы не принимая во внимание минимальное времени для сна, который установлен в

Настройки ---> Display -----> Sleep

После вас выпустит полный вакелон, устройство займет указанное время, чтобы заснуть.

Надеюсь, это даст вам некоторое разъяснение относительно того, почему ваш код не работает.