目录

Assigning Permissions in the Manifest File

Before calling the time awareness capability, assign required permissions in the manifest file.

  1. <!-- Location permission, which is sensitive. After the permission is declared, you need to dynamically apply for it in the code. -->
  2. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  3. <!-- Location permission. If only the IP address-based time capture function is used, you can declare only this permission. -->
  4. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

Importing API Classes

To use the time awareness capability, you need to import the public capability classes of HUAWEI Awareness Kit, and also the time-related classes.

  1. import com.huawei.hmf.tasks.OnFailureListener;
  2. import com.huawei.hmf.tasks.OnSuccessListener;
  3. import com.huawei.hms.kit.awareness.Awareness;
  4. // Import the time capture-related classes.
  5. import com.huawei.hms.kit.awareness.capture.TimeCategoriesResponse;
  6. import com.huawei.hms.kit.awareness.status.TimeCategories;
  7. // Import time barrier-related classes.
  8. import com.huawei.hms.kit.awareness.barrier.AwarenessBarrier;
  9. import com.huawei.hms.kit.awareness.barrier.BarrierStatus;
  10. import com.huawei.hms.kit.awareness.barrier.TimeBarrier;
  11. import com.huawei.hms.kit.awareness.barrier.BarrierUpdateRequest;

Developing Capabilities

Developing capture capabilities

1. Obtain the Capture Client object of HUAWEI Awareness Kit.

2. Call the time query capability API through the Capture Client object to query the time.

3. Enable your app to listen for the result returned by HUAWEI Awareness Kit for further processing.

  1. Awareness.getCaptureClient(this).getTimeCategories()
  2.        .addOnSuccessListener(new OnSuccessListener<TimeCategoriesResponse>() {
  3.            @Override
  4.            public void onSuccess(TimeCategoriesResponse timeCategoriesResponse) {
  5.                TimeCategories categories = timeCategoriesResponse.getTimeCategories();
  6.                int[] timeInfo = categories.getTimeCategories();
  7.            }
  8.        })
  9.        .addOnFailureListener(new OnFailureListener() {
  10.            @Override
  11.            public void onFailure(Exception e) {
  12.                Log.e(TAG, "get Time Categories failed", e);
  13.            }
  14.        });

Developing barrier capabilities

The following example illustrates how to develop a barrier for duringPeriodOfDay, which allows the barrier to be triggered once a user is in a specified time frame in a specified time zone.

1. Define the barrier.

  1. long oneHourMilliSecond = 60 * 60 * 1000L;
  2. AwarenessBarrier periodOfDayBarrier = TimeBarrier.duringPeriodOfDay(TimeZone.getDefault(),
  3.        11 * oneHourMilliSecond, 12 * oneHourMilliSecond);

2. Define PendingIntent for the barrier, for example, to send a broadcast, and create a broadcast receiver to receive the broadcast.

  1. final String BARRIER_RECEIVER_ACTION = getApplication().getPackageName() + "TIME_BARRIER_RECEIVER_ACTION";
  2. Intent intent = new Intent(BARRIER_RECEIVER_ACTION);
  3. PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
  4. TimeBarrierReceiver barrierReceiver = new TimeBarrierReceiver();registerReceiver(barrierReceiver, new IntentFilter(BARRIER_RECEIVER_ACTION));

3. Define the label for the barrier and add the barrier.

  1. String timeBarrierLabel = "period of day barrier";
  2. BarrierUpdateRequest.Builder builder = new BarrierUpdateRequest.Builder();
  3. BarrierUpdateRequest request = builder.addBarrier(timeBarrierLabel, periodOfDayBarrier,pendingIntent).build();
  4. Awareness.getBarrierClient(context).updateBarriers(request)
  5.        .addOnSuccessListener(new OnSuccessListener<Void>() {
  6.            @Override
  7.            public void onSuccess(Void aVoid) {
  8.                Toast.makeText(getApplicationContext(), "add barrier success", Toast.LENGTH_SHORT).show();
  9.            }
  10.        })
  11.        .addOnFailureListener(new OnFailureListener() {
  12.            @Override
  13.            public void onFailure(Exception e) {
  14.                Toast.makeText(getApplicationContext(), "add barrier failed", Toast.LENGTH_SHORT).show();
  15.                Log.e(TAG, "add barrier failed", e);
  16.            }
  17.        });

4. Define the broadcast receiver to listen for the barrier event for further processing.

  1. class TimeBarrierReceiver extends BroadcastReceiver {
  2.    @Override
  3.    public void onReceive(Context context, Intent intent) {
  4.        BarrierStatus barrierStatus = BarrierStatus.extract(intent);
  5.        String label = barrierStatus.getBarrierLabel();
  6.        switch(barrierStatus.getPresentStatus()) {
  7.            case BarrierStatus.TRUE:
  8.                Log.i(TAG, label + " status:true");
  9.                break;
  10.            case BarrierStatus.FALSE:
  11.                Log.i(TAG, label + " status:false");
  12.                break;
  13.            case BarrierStatus.UNKNOWN:
  14.                Log.i(TAG, label + " status:unknown");
  15.                break;
  16.        }
  17.    }
  18. }