即使在Android中屏幕进入睡眠模式后仍继续振动

时间:2013-01-28 11:59:20

标签: java android android-service

在我的应用程序中,我通过以下代码

启动VIBRATOR_SERVICE
long[] pattern = {50,100,1000}
Vibrator vibe=(Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibe.vibrate(pattern, 0);

我希望振动继续,直到我打电话

vibe.cancel();

“守则”工作正常,但当屏幕进入睡眠模式时,振动会消失。

即使屏幕进入睡眠模式,我仍希望振动继续。有没有办法做到这一点?请帮帮我。

提前致谢。 :)

2 个答案:

答案 0 :(得分:4)

问题的正确答案如下

在执行此操作之前,请不要忘记将权限“android.permission.VIBRATE”添加到您的应用清单文件中。

public BroadcastReceiver vibrateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            vibe.vibrate(pattern, 0);
        }
    }
};

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
registerReceiver(vibrateReceiver, filter);

wakelock 在这里不起作用,因为接收器只有在屏幕熄灭后才会收到意图。虽然我们可以在屏幕进入关闭模式后获取唤醒锁,但振动会停止,因为它发生在ACTION_SCREEN_OFF。所以可以通过在接收广播后再次启动振动来完成。

答案 1 :(得分:1)

试试这可能对你有所帮助。首先为此设置broadcast receiver,这样当移动灯屏幕关闭然后写入振动移动的逻辑。

 public BroadcastReceiver wakeLockReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent)
    {
        if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            //WRITE LOGIC OF VIBRATION.
        }
    }
};

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
registerReceiver(wakeLockReceiver, filter);

在AndroidManifest.xml中添加权限

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