目录

Assigning Permissions in the Manifest File

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

  1. <!-- Behavior detection permission (Android 10 or later). This permission is sensitive and needs to be dynamically applied for in the code after being declared. -->
  2. <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
  3. <!-- Behavior detection permission (Android 9). This permission is sensitive and needs to be dynamically applied for in the code after being declared. -->
  4. <uses-permission android:name="com.huawei.hms.permission.ACTIVITY_RECOGNITION" />

Importing API Classes

To use the behavior awareness capability, you need to import the public capability classes of HUAWEI Awareness Kit, and also the behavior-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 behavior detection capture-related classes.
  5. import com.huawei.hms.kit.awareness.capture.BehaviorResponse;
  6. import com.huawei.hms.kit.awareness.status.BehaviorStatus;
  7. import com.huawei.hms.kit.awareness.status.DetectedBehavior;
  8. // Import the behavior detection barrier-related classes.
  9. import com.huawei.hms.kit.awareness.barrier.AwarenessBarrier;
  10. import com.huawei.hms.kit.awareness.barrier.BarrierStatus;
  11. import com.huawei.hms.kit.awareness.barrier.BehaviorBarrier;
  12. 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 behavior query capability API through the Capture Client object to obtain the user's context.

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

  1. Awareness.getCaptureClient(this).getBehavior()
  2.        .addOnSuccessListener(new OnSuccessListener<BehaviorResponse>() {
  3.            @Override
  4.            public void onSuccess(BehaviorResponse behaviorResponse) {
  5.                BehaviorStatus behaviorStatus = behaviorResponse.getBehaviorStatus();
  6.                DetectedBehavior mostLikelyBehavior = behaviorStatus.getMostLikelyBehavior();
  7.                String str = "Most likely behavior type is " + mostLikelyBehavior.getType() +
  8.                        ",the confidence is " + mostLikelyBehavior.getConfidence();
  9.                Log.i(TAG, str);
  10.            }
  11.        })
  12.        .addOnFailureListener(new OnFailureListener() {
  13.            @Override
  14.            public void onFailure(Exception e) {
  15.                Log.e(TAG, "get behavior failed", e);
  16.            }
  17.        });

Developing barrier capabilities

The following example illustrates how to develop a barrier triggered by the keeping condition. That is, the barrier will be triggered when a user's behavior matches the behavior defined here.

1. Define the barrier.

  1. AwarenessBarrier keepStillBarrier = BehaviorBarrier.keeping(BehaviorBarrier.BEHAVIOR_STILL);

2. Define PendingIntent that will be triggered upon a barrier status change, for example, to send a broadcast, and create a broadcast receiver to receive the broadcast.

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

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

  1. String behaviorBarrierLabel = "behavior keeping barrier";
  2. BarrierUpdateRequest.Builder builder = new BarrierUpdateRequest.Builder();
  3. BarrierUpdateRequest request = builder.addBarrier(behaviorBarrierLabel, keepStillBarrier,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 BehaviorBarrierReceiver 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. }