用手机睡觉检测手势

时间:2014-01-14 11:26:10

标签: java android sleep gesture-recognition

我正在开发一个SOS安卓应用。如果手机处于睡眠/待机模式,我想检测手势(例如屏幕上的几次触摸),并开始发送帮助请求(例如发送短信)。 我该如何检测这个手势? 有人可以帮助我吗? 谢谢

--- ----解 我找到了解决方案here,这是我的代码:

1)在主要活动中

getApplicationContext().startService(new Intent(this, UpdateService.class));

2)我创建了一个服务

public class UpdateService extends Service {

@Override
public void onCreate() {
    super.onCreate();
    // register receiver that handles screen on and screen off logic
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    BroadcastReceiver mReceiver = new PowerHookReceiver();
    registerReceiver(mReceiver, filter);
}

@Override
public void onStart(Intent intent, int startId) {
    boolean screenOn = intent.getBooleanExtra("screen_state", false);
    if (!screenOn) {
        // your code
    } else {
        // your code
    }
}

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}}

3)我创建了一个PowerHookReceiver();

public class PowerHookReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {


    Intent i = new Intent(context, UpdateService.class);
    context.startService(i);
    //do what you want
}}

4)清单

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

 <receiver android:name=".PowerHookReceiver" >
    </receiver>

    <service android:name=".UpdateService" />

我希望它有用l =)

2 个答案:

答案 0 :(得分:0)

注意:当手机处于待机模式或睡眠模式时,手机不会在屏幕上检测到任何触摸事件。因此,唯一的选择是通过广播接收器中的寄存器意图操作从任何硬件按钮获取事件。

您可以通过挂钩电源按钮生成SOS。注册单击电源按钮时启动的广播接收器。

现在接收器的onReceive()方法做你想要的。 Code For Broadcast接收器类下面:

public class PowerHookReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        // TODO Auto-generated method stub

         Log.v("#@%@%#", "Power button is pressed.");  

         Toast.makeText(arg0, "power button clicked",Toast.LENGTH_LONG).show();

        //perform what you want here
    }
}

在Manifest中注册此接收器:

 <receiver android:name="com.PowerHookReceiver">
        <intent-filter>
            <action android:name="android.intent.action.SCREEN_OFF"></action>
            <action android:name="android.intent.action.SCREEN_ON"></action>
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED"></action>
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"></action>
             <action android:name="android.intent.action.ACTION_SHUTDOWN"></action>
        </intent-filter>
    </receiver>

现在使用接收器的onReceive()方法执行任务。

答案 1 :(得分:0)

如果屏幕关闭(即处于待机状态),硬件将不会注册任何触摸事件,因此您无法提出要求(检测屏幕手势)。当设备进入待机/休眠状态时,触摸屏将被有效关闭以节省电池电量。您可以做的最好的事情是检测一个唤醒屏幕的动作,例如其中一个硬件按钮。

此外,如果您想检测应用的触摸事件,则设备需要在前台启动您的活动。同样,屏幕手势对于SOS类型的应用程序来说是非首发。