2014-01-14 4 views
0

Я разрабатываю приложение для Android 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

Примечание: Телефон не обнаружит какое-либо сенсорное события на экране, когда он находится в режиме ожидания или в спящем режиме. Таким образом, единственный вариант - получить события с любой аппаратной кнопки через действие намерения регистрации в Broadcast Receiver.

Вы можете создать SOS, нажав кнопку питания. Зарегистрируйте широковещательный приемник, который запускается при нажатии кнопки питания.

В настоящее время в onReceive() метод Получателя делает то, что вы хотите. Код ниже для класса приемника 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 
    } 
} 

Регистра этого приемник в манифесте:

<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

Смежные вопросы