We use essential cookies for the website to function, as well as analytics cookies for analyzing and creating statistics of the website performance. To agree to the use of analytics cookies, click "Accept All". You can manage your preferences at any time by clicking "Cookie Settings" on the footer. More Information.

Only Essential Cookies
Accept All
GuidesAwareness KitDeveloping Your AppTime Awareness

Time Awareness

Assigning Permissions in the Manifest File

Before calling the time awareness capability, assign required permissions in the manifest file.
Collapse
Word wrap
Dark theme
Copy code
  1. <!-- Location permission. This permission is sensitive and needs to be dynamically applied for in the code after being declared. -->
  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 Awareness Kit, and also the time-related classes.
Collapse
Word wrap
Dark theme
Copy code
  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

Capture

  1. Obtain the Capture Client object of Awareness Kit.
  2. Call the time query capability API through the Capture Client object to obtain the user's context.
  3. Enable your app to process services based on the result returned by Awareness Kit.
    Java
    Kotlin
    Collapse
    Word wrap
    Dark theme
    Copy code
    1. Awareness.getCaptureClient(this).getTimeCategories()
    2. // Callback listener for execution success.
    3. .addOnSuccessListener(new OnSuccessListener<TimeCategoriesResponse>() {
    4. @Override
    5. public void onSuccess(TimeCategoriesResponse timeCategoriesResponse) {
    6. TimeCategories categories = timeCategoriesResponse.getTimeCategories();
    7. int[] timeInfo = categories.getTimeCategories();
    8. }
    9. })
    10. // Callback listener for execution failure.
    11. .addOnFailureListener(new OnFailureListener() {
    12. @Override
    13. public void onFailure(Exception e) {
    14. Log.e(TAG, "get Time Categories failed", e);
    15. }
    16. });
    Collapse
    Word wrap
    Dark theme
    Copy code
    1. Awareness.getCaptureClient(this).timeCategories
    2. // Callback listener for execution success.
    3. .addOnSuccessListener { timeCategoriesResponse: TimeCategoriesResponse ->
    4. val categories = timeCategoriesResponse.timeCategories
    5. val timeInfo = categories.timeCategories
    6. }
    7. // Callback listener for execution failure.
    8. .addOnFailureListener { e: Exception? -> Log.e(TAG, "get Time Categories failed", e)
    9. }

Barrier

The following example illustrates how to develop a barrier triggered by the duringPeriodOfDay condition. That is, the barrier will be triggered when a user is in a specified time frame in a specified time zone.

  1. Define the barrier.
    Java
    Kotlin
    Collapse
    Word wrap
    Dark theme
    Copy code
    1. long oneHourMilliSecond = 60 * 60 * 1000L;
    2. AwarenessBarrier periodOfDayBarrier = TimeBarrier.duringPeriodOfDay(TimeZone.getDefault(),
    3. 11 * oneHourMilliSecond, 12 * oneHourMilliSecond);
    Collapse
    Word wrap
    Dark theme
    Copy code
    1. val oneHourMilliSecond = 60 * 60 * 1000L
    2. var periodOfDayBarrier : AwarenessBarrier = TimeBarrier.duringPeriodOfDay(TimeZone.getDefault(),
    3. 11 * oneHourMilliSecond, 12 * oneHourMilliSecond)
  2. Define PendingIntent that will be triggered upon a barrier status change, and register a broadcast receiver to receive the broadcast.
    Java
    Kotlin
    Collapse
    Word wrap
    Dark theme
    Copy code
    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();
    5. registerReceiver(barrierReceiver, new IntentFilter(BARRIER_RECEIVER_ACTION));
    Collapse
    Word wrap
    Dark theme
    Copy code
    1. val BARRIER_RECEIVER_ACTION = application.packageName + "TIME_BARRIER_RECEIVER_ACTION"
    2. val intent = Intent(BARRIER_RECEIVER_ACTION)
    3. val pendingIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)
    4. val barrierReceiver = TimeBarrierReceiver()
    5. registerReceiver(barrierReceiver, IntentFilter(BARRIER_RECEIVER_ACTION))
  3. Define the label for the barrier and add the barrier.
    Java
    Kotlin
    Collapse
    Word wrap
    Dark theme
    Copy code
    1. String timeBarrierLabel = "period of day barrier";
    2. // Define a request for updating a barrier.
    3. BarrierUpdateRequest.Builder builder = new BarrierUpdateRequest.Builder();
    4. BarrierUpdateRequest request = builder.addBarrier(timeBarrierLabel, periodOfDayBarrier,pendingIntent).build();
    5. Awareness.getBarrierClient(context).updateBarriers(request)
    6. // Callback listener for execution success.
    7. .addOnSuccessListener(new OnSuccessListener<Void>() {
    8. @Override
    9. public void onSuccess(Void aVoid) {
    10. Toast.makeText(getApplicationContext(), "add barrier success", Toast.LENGTH_SHORT).show();
    11. }
    12. })
    13. // Callback listener for execution failure.
    14. .addOnFailureListener(new OnFailureListener() {
    15. @Override
    16. public void onFailure(Exception e) {
    17. Toast.makeText(getApplicationContext(), "add barrier failed", Toast.LENGTH_SHORT).show();
    18. Log.e(TAG, "add barrier failed", e);
    19. }
    20. });
    Collapse
    Word wrap
    Dark theme
    Copy code
    1. val timeBarrierLabel = "period of day barrier"
    2. // Define a request for updating a barrier.
    3. val builder = BarrierUpdateRequest.Builder()
    4. val request = builder.addBarrier(timeBarrierLabel, periodOfDayBarrier, pendingIntent).build()
    5. Awareness.getBarrierClient(context).updateBarriers(request)
    6. // Callback listener for execution success.
    7. .addOnSuccessListener { Toast.makeText(applicationContext, "add barrier success", Toast.LENGTH_SHORT).show()
    8. }
    9. // Callback listener for execution failure.
    10. .addOnFailureListener { e ->
    11. Toast.makeText(applicationContext, "add barrier failed", Toast.LENGTH_SHORT).show()
    12. Log.e(TAG, "add barrier failed", e)
    13. }
  4. Define the broadcast receiver to listen for the barrier event for further processing.
    Java
    Kotlin
    Collapse
    Word wrap
    Dark theme
    Copy code
    1. // Define the broadcast receiver to listen for the barrier event.
    2. class TimeBarrierReceiver extends BroadcastReceiver {
    3. @Override
    4. public void onReceive(Context context, Intent intent) {
    5. BarrierStatus barrierStatus = BarrierStatus.extract(intent);
    6. String label = barrierStatus.getBarrierLabel();
    7. switch(barrierStatus.getPresentStatus()) {
    8. case BarrierStatus.TRUE:
    9. Log.i(TAG, label + " status:true");
    10. break;
    11. case BarrierStatus.FALSE:
    12. Log.i(TAG, label + " status:false");
    13. break;
    14. case BarrierStatus.UNKNOWN:
    15. Log.i(TAG, label + " status:unknown");
    16. break;
    17. }
    18. }
    19. }
    Collapse
    Word wrap
    Dark theme
    Copy code
    1. // Define the broadcast receiver to listen for the barrier event.
    2. internal inner class TimeBarrierReceiver : BroadcastReceiver() {
    3. override fun onReceive(context: Context, intent: Intent) {
    4. val barrierStatus = BarrierStatus.extract(intent)
    5. val label = barrierStatus.barrierLabel
    6. when (barrierStatus.presentStatus) {
    7. BarrierStatus.TRUE -> Log.i(TAG, "$label status:true")
    8. BarrierStatus.FALSE -> Log.i(TAG, "$label status:false")
    9. BarrierStatus.UNKNOWN -> Log.i(TAG, "$label status:unknown")
    10. }
    11. }
    12. }
  5. Delete the barrier according to the label after processing services.
    Java
    Kotlin
    Collapse
    Word wrap
    Dark theme
    Copy code
    1. String timeBarrierLabel = "period of day barrier";
    2. // Define a request for updating a barrier.
    3. BarrierUpdateRequest.Builder builder = new BarrierUpdateRequest.Builder();
    4. BarrierUpdateRequest request = builder.deleteBarrier(timeBarrierLabel).build();
    5. Awareness.getBarrierClient(context).updateBarriers(request)
    6. // Callback listener for execution success.
    7. .addOnSuccessListener(new OnSuccessListener<Void>() {
    8. @Override
    9. public void onSuccess(Void aVoid) {
    10. Toast.makeText(getApplicationContext(), "delete barrier success", Toast.LENGTH_SHORT).show();
    11. }
    12. })
    13. // Callback listener for execution failure.
    14. .addOnFailureListener(new OnFailureListener() {
    15. @Override
    16. public void onFailure(Exception e) {
    17. Toast.makeText(getApplicationContext(), "delete barrier failed", Toast.LENGTH_SHORT).show();
    18. Log.e(TAG, "delete barrier failed", e);
    19. }
    20. });
    Collapse
    Word wrap
    Dark theme
    Copy code
    1. val timeBarrierLabel = "period of day barrier"
    2. // Define a request for updating a barrier.
    3. val builder = BarrierUpdateRequest.Builder()
    4. val request = builder.deleteBarrier(timeBarrierLabel).build()
    5. Awareness.getBarrierClient(context).updateBarriers(request)
    6. // Callback listener for execution success.
    7. .addOnSuccessListener { Toast.makeText(applicationContext, "delete barrier success", Toast.LENGTH_SHORT).show()
    8. }
    9. // Callback listener for execution failure.
    10. .addOnFailureListener { e ->
    11. Toast.makeText(applicationContext, "delete barrier failed", Toast.LENGTH_SHORT).show()
    12. Log.e(TAG, "delete barrier failed", e)
    13. }
Search in Guides
Enter a keyword.