2015-04-04 114 views
0

我已经写了一个android程序,其中包含按下音量按钮时增加1的计数器。当按下此按钮时,它也应该关闭屏幕,并在重新打开之前等待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 2015-04-04 11:35:27

回答

0

您的代码几乎没有问题。

1.您正在使用错误的激活锁定

PowerManager.PARTIAL_WAKE_LOCK - 确保CPU运行;在 screenand键盘背光灯将被允许走下车

你应该使用PowerManager.FULL_WAKE_LOCK你的目的,但它是一个过时的API,因此不优选,而是现在用于同样目的的天FLAG_KEEP_SCREEN_ON。

2.您希望设备在5秒后立即关闭。

这不会发生,因为你不考虑最低的睡眠时间,在

设置--->显示----->睡眠

设置你之后将释放完整的唤醒锁,该设备将花费上述时间去睡觉。

我希望这会给你一些澄清,为什么你的代码不工作。