2014-01-14 57 views
0

我正在開發一個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" /> 

我希望它是有用=)

+0

好的,那麼如何在待機模式下使用硬件按鈕(啓動一項活動)? – user3193714

回答

0

如果屏幕關閉(即處於待機狀態),硬件將不會註冊任何觸摸事件,因此您所要求的(檢測屏幕手勢)是不可能的。當設備進入待機/睡眠狀態時,觸摸屏會有效關閉以節省電池電量。你能做的最好的是檢測一個確實喚醒屏幕的動作,例如其中一個硬件按鈕。另外,如果您想檢測應用程序的觸摸事件,則該設備需要在前臺處於活動狀態。再次,屏幕手勢對於SOS類型的應用程序來說是不起動的。

+0

我正在使用一個IntentService,並使它在WAKE模式下運行。我如何檢測手勢或電源按鈕或任何其他按鈕按下事件? –

0

注:電話不會在屏幕上檢測到任何觸摸事件,當它處於待機模式或睡眠模式。因此,唯一的選擇是通過廣播接收器中的寄存器意向操作從任何硬件按鈕獲取事件。

您可以通過連接電源按鈕來生成SOS。註冊點擊電源按鈕時啓動的廣播接收器。

現在在onReceive()方法的接收器做你想做的。下面的代碼對於廣播接收機類:

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 
    } 
} 

註冊此接收器清單:

<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()方法來執行你的任務。

+0

謝謝,但它不起作用... – user3193714

+0

你面臨的是什麼問題? @ user3193714 –

+0

這個代碼,不起作用,但我找到了一個服務的解決方案...我要發佈它! – user3193714