2015-02-08 4 views
0

Мой исходный код здесь https://github.com/jackygrahamez/MayDayКак вызвать тревоги

У меня есть HomeActivity.java с OnCreate методом

... 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.welcome_screen); 

    Bundle bundle=getIntent().getExtras(); 
    boolean startedByCUP=false; 
    if(bundle!=null) { 
     Log.e(">>>>>>", "START_BY_CUP"); 
     startedByCUP = bundle.getBoolean("START_BY_CUP"); 
    } 
... 

Я пытаюсь понять, как я могу связать состояние, при котором пучок верно, чтобы вызвать multiClickEvent, чтобы после 5 щелчков тревоги срабатывал. Спусковой аппаратное обеспечение встроен в этот

HardwareTriggerReceiver.java

... 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    Log.e(">>>>>>>", "in onReceive of HWReceiver"); 
    String action = intent.getAction(); 

    if (!isCallActive(context) && isScreenLocked(context) 
     && (action.equals(ACTION_SCREEN_OFF) ||   
     action.equals(ACTION_SCREEN_ON))) { 
    multiClickEvent.registerClick(System.currentTimeMillis()); 
    if (multiClickEvent.isActivated()) { 
     onActivation(context); 
     resetEvent(); 
    } 
} 
} 
... 

MultiClickEvent.java

package com.mayday.md.trigger; 

import android.util.Log; 

public class MultiClickEvent { 
public static final int TIME_INTERVAL = 10000; 
private static final int TOTAL_CLICKS = 5; 

private Long firstEventTime; 
private int clickCount = 0; 

public void reset() { 
    firstEventTime = null; 
    clickCount = 0; 
} 

public void registerClick(Long eventTime) { 
    if (isFirstClick() || notWithinLimit(eventTime)) { 
     firstEventTime = eventTime; 
     clickCount = 1; 
     return; 
    } 
    clickCount++; 
    Log.e(">>>>>>", "MultiClickEvent clickCount = " + clickCount); 
} 

private boolean notWithinLimit(long current) { 
    return (current - firstEventTime) > TIME_INTERVAL; 
} 

private boolean isFirstClick() { 
    return firstEventTime == null; 
} 

public boolean isActivated() { 
    return clickCount >= TOTAL_CLICKS; 
} 
} 

Я попытался создать экземпляр MultiClickEvent в HomeActivity, но это не отслеживать клики.

+1

Получает ли ваш 'HWReceiver' аппаратные клики? Также избегайте использования 'System.currentTimeMillis()' и вместо этого используйте 'SystemClock.elapsedRealtime()', чтобы время все еще учитывалось даже при спящем устройстве. – initramfs

+0

Да, HWReceiver запускается нажатием кнопки питания на фактическом телефоне. Я хочу нажать метку приложения на ** Gear Fit ** и привязать ее к той же логике кнопки питания. В настоящее время ** HomeActivity ** 'bundle! = Null' запускает журнал, когда метка используется. –

+0

Я предлагаю вам регистрировать состояния всех условий в вашем операторе if (раздел до вызова 'registerClick()', чтобы узнать, не является ли кто-либо из них ожидаемым. – initramfs

ответ

0

Я в конечном итоге отслеживания кликов на передач Fit приложение, а затем посылает сигнал тревоги все в OnCreate

 if(bundle!=null) { 
     if (!hardwareTriggerReceiver.isCallActive(getApplicationContext())) { 
      int c = mPref.getInt("numRun", 0); 
      int TIME_INTERVAL = 10000; 
      int TOTAL_CLICKS = 5; 
      long delta = 0; 
      Long eventTime = System.currentTimeMillis(); 
      mPref.edit().putLong("eventTime", eventTime).commit(); 
      Long firstEventTime = mPref.getLong("firstEventTime", 0); 
      if (firstEventTime == 0) { 
       firstEventTime = eventTime; 
       mPref.edit().putLong("firstEventTime", firstEventTime).commit(); 
      } 
      delta = eventTime - firstEventTime; 
      Log.e(">>>>>>", "START_BY_CUP delta "+delta); 
      if (delta < TIME_INTERVAL) { 
       c++; 
       mPref.edit().putInt("numRun",c).commit(); 
       Log.e(">>>>>>", "START_BY_CUP "+c); 
       if (c >=TOTAL_CLICKS) { 
        hardwareTriggerReceiver.onActivation(getApplicationContext()); 
        mPref.edit().putInt("numRun", 0).apply(); 
        mPref.edit().putLong("firstEventTime", 0).apply(); 
       } 
      } else { 
       mPref.edit().putInt("numRun", 0).apply(); 
       mPref.edit().putLong("firstEventTime", 0).apply(); 
      } 
     } 
    } 
Смежные вопросы