【发布时间】:2021-04-06 10:12:16
【问题描述】:
我们希望对多天代码或时间段使用单个 Awareness Barrier 实例。但是找不到传递方法的参数, duringTimePeriod(), duringPeriodOfWeek(), inSunriseOrSunsetPeriod()
【问题讨论】:
标签: huawei-mobile-services huawei-developers
我们希望对多天代码或时间段使用单个 Awareness Barrier 实例。但是找不到传递方法的参数, duringTimePeriod(), duringPeriodOfWeek(), inSunriseOrSunsetPeriod()
【问题讨论】:
标签: huawei-mobile-services huawei-developers
通过查看您的用例,您可以使用 AwarenessBarrier 类的 or(AwarenessBarrier awarenessBarrier) 方法:
String timeBarrierLabel = "一天中的障碍";
BarrierUpdateRequest.Builder builder = new BarrierUpdateRequest.Builder();
AwarenessBarrier periodOfWeekBarrier1 = TimeBarrier.duringPeriodOfWeek(TimeBarrier.WEDNESDAY_CODE,TimeZone.getDefault(), 9 * oneHourMilliSecond, 20 * oneHourMilliSecond);
AwarenessBarrier periodOfWeekBarrier2 = TimeBarrier.duringPeriodOfWeek(TimeBarrier.WEDNESDAY_CODE||,TimeZone.getDefault(), 9 * oneHourMilliSecond, 20 * oneHourMilliSecond);
BarrierUpdateRequest 请求 = 构建器。
addBarrier(timeBarrierLabel, AwarenessBarrier.or(periodOfWeekBarrier1,periodOfWeekBarrier2) ,).build();
【讨论】:
您可以根据时间要求设置TimeBarrier并添加,例如
@Override
public void onClick(View v) {
long oneHourMilliSecond = 60 * 60 * 1000L;
switch (v.getId()) {
case R.id.add_timeBarrier_inSunriseOrSunsetPeriod:
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
AwarenessBarrier sunsetBarrier = TimeBarrier.inSunriseOrSunsetPeriod(TimeBarrier.SUNSET_CODE,
-oneHourMilliSecond, oneHourMilliSecond);
Utils.addBarrier(this, IN_SUNRISE_OR_SUNSET_PERIOD_BARRIER_LABEL,
sunsetBarrier, mPendingIntent);
break;
case R.id.add_timeBarrier_duringPeriodOfDay:
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
AwarenessBarrier periodOfDayBarrier = TimeBarrier.duringPeriodOfDay(TimeZone.getDefault(),
11 * oneHourMilliSecond, 12 * oneHourMilliSecond);
Utils.addBarrier(this, DURING_PERIOD_OF_DAT_BARRIER_LABEL, periodOfDayBarrier,
mPendingIntent);
break;
case R.id.add_timeBarrier_duringTimePeriod:
long currentTimeStamp = System.currentTimeMillis();
long tenSecondsMillis = 10 * 1000L;
AwarenessBarrier timePeriodBarrier = TimeBarrier.duringTimePeriod(currentTimeStamp,
currentTimeStamp + tenSecondsMillis);
Utils.addBarrier(this, DURING_TIME_PERIOD_BARRIER_LABEL,
timePeriodBarrier, mPendingIntent);
break;
case R.id.add_timeBarrier_duringPeriodOfWeek:
AwarenessBarrier periodOfWeekBarrier = TimeBarrier.duringPeriodOfWeek(TimeBarrier.MONDAY_CODE,
TimeZone.getDefault(), 9 * oneHourMilliSecond, 10 * oneHourMilliSecond);
Utils.addBarrier(this, DURING_PERIOD_OF_WEEK_BARRIER_LABEL,
periodOfWeekBarrier, mPendingIntent);
break;
case R.id.add_timeBarrier_inTimeCategory:
AwarenessBarrier inTimeCategoryBarrier = TimeBarrier.inTimeCategory(TimeBarrier.TIME_CATEGORY_WEEKEND);
Utils.addBarrier(this, IN_TIME_CATEGORY_LABEL, inTimeCategoryBarrier, mPendingIntent);
break;
case R.id.delete_barrier:
Utils.deleteBarrier(this, mPendingIntent);
break;
default:
break;
}
public static void addBarrier(Context context, final String label, AwarenessBarrier barrier, PendingIntent pendingIntent) {
BarrierUpdateRequest.Builder builder = new BarrierUpdateRequest.Builder();
// When the status of the registered barrier changes, pendingIntent is triggered.
// label is used to uniquely identify the barrier. You can query a barrier by label and delete it.
BarrierUpdateRequest request = builder.addBarrier(label, barrier, pendingIntent).build();
Awareness.getBarrierClient(context).updateBarriers(request)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
showToast(context, "add barrier success");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
showToast(context, "add barrier failed");
Log.e(TAG, "add barrier failed", e);
}
});
}
示例代码请参考Link。
【讨论】: