0

ソースコードはこちらhttps://github.com/jackygrahamez/MayDay

onCreate メソッドを持つHomeActivity.javaがあります

...
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");
    }
...

バンドルが true の条件を関連付けて 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 に作成しようとしましたが、クリックを追跡しませんでした。

4

1 に答える 1

0

結局、 Gear 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();
            }
        }
    }
于 2015-02-11T00:14:01.317 に答える