android 情景感知 sdk,情景感知服务

在Manifest指定权限

在调用情景感知能力时,开发者需要先在Manifest中指定相应的权限。使用不同情景感知能力需指定不同的权限,具体所需权限请参阅《开发指南》。例如,使用耳机状态感知能力,需要开启设备的蓝牙功能,需要在Manifest中申请蓝牙权限:

导入接口类

在调用不同的情景感知能力时,开发者需要导入相应的能力接口类。不同能力所需的类的路径和类名不同,具体请参阅《API参考》。例如,使用耳机状态感知能力,除需要导入情景感知服务的公共能力类外,还需要导入耳机状态相关的类。

import com.huawei.hmf.tasks.OnFailureListener;

import com.huawei.hmf.tasks.OnSuccessListener;

import com.huawei.hms.kit.awareness.Awareness;

// 导入耳机快照相关类

import com.huawei.hms.kit.awareness.capture.HeadsetStatusResponse;

import com.huawei.hms.kit.awareness.status.HeadsetStatus;

// 导入耳机围栏相关类

import com.huawei.hms.kit.awareness.barrier.AwarenessBarrier;

import com.huawei.hms.kit.awareness.barrier.BarrierStatus;

import com.huawei.hms.kit.awareness.barrier.HeadsetBarrier;

import com.huawei.hms.kit.awareness.barrier.BarrierUpdateRequest;

Capture能力开发

获取Awareness Kit的"CaptureClient"。

通过"Capture Client"调用耳机状态查询能力接口查询情景状态。

监听情景感知服务结果返回,进行应用的业务处理。

Java示例代码:

Awareness.getCaptureClient(this).getHeadsetStatus()

.addOnSuccessListener(new OnSuccessListener() {

@Override

public void onSuccess(HeadsetStatusResponse headsetStatusResponse) {

HeadsetStatus headsetStatus = headsetStatusResponse.getHeadsetStatus();

int status = headsetStatus.getStatus();

String stateStr = "Headsets are " +

(status == HeadsetStatus.CONNECTED ? "connected" : "disconnected");

Log.i(TAG, stateStr);

}

})

.addOnFailureListener(new OnFailureListener() {

@Override

public void onFailure(Exception e) {

Log.e(TAG, "get Headsets Capture failed", e);

}

});

Kotlin示例代码:

Awareness.getCaptureClient(this).headsetStatus

.addOnSuccessListener { headsetStatusResponse: HeadsetStatusResponse ->

val headsetStatus = headsetStatusResponse.headsetStatus

val status = headsetStatus.status

val stateStr = "Headsets are " +if (status == HeadsetStatus.CONNECTED) "connected" else "disconnected"

Log.i(TAG, stateStr)

}

.addOnFailureListener { e: Exception? ->

Log.e(TAG, "get Headsets Capture failed", e)

}

Barrier能力开发

以下以开发耳机"Connecting"的Barrier为例(耳机插入后触发Barrier)。

1. 定义Barrier。

Java示例代码:

AwarenessBarrier headsetBarrier = HeadsetBarrier.connecting();

Kotlin示例代码:

var headsetBarrier : AwarenessBarrier = HeadsetBarrier.connecting()

2. 定义Barrier状态改变时触发的"PendingIntent",本示例中为发送一个广播,同时新建一个广播接收器用来接收这个广播。

Java示例代码:

final String BARRIER_RECEIVER_ACTION = getApplication().getPackageName() + "HEADSET_BARRIER_RECEIVER_ACTION";

Intent intent = new Intent(BARRIER_RECEIVER_ACTION);

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);

HeadsetBarrierReceiver barrierReceiver = new HeadsetBarrierReceiver();

registerReceiver(barrierReceiver, new IntentFilter(BARRIER_RECEIVER_ACTION));

Kotlin示例代码:

val BARRIER_RECEIVER_ACTION = application.packageName + "HEADSET_BARRIER_RECEIVER_ACTION"

val intent = Intent(BARRIER_RECEIVER_ACTION)

val pendingIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)

val barrierReceiver = HeadsetBarrierReceiver()

registerReceiver(barrierReceiver, IntentFilter(BARRIER_RECEIVER_ACTION))

3. 定义Barrier对应的标签Label,然后添加Barrier。

Java示例代码:

String headsetBarrierLabel = "headset connecting barrier";

BarrierUpdateRequest.Builder builder = new BarrierUpdateRequest.Builder();

BarrierUpdateRequest request = builder.addBarrier(headsetBarrierLabel, headsetBarrier,pendingIntent).build();

Awareness.getBarrierClient(context).updateBarriers(request)

.addOnSuccessListener(new OnSuccessListener() {

@Override

public void onSuccess(Void aVoid) {

Toast.makeText(getApplicationContext(), "add barrier success", Toast.LENGTH_SHORT).show();

}

})

.addOnFailureListener(new OnFailureListener() {

@Override

public void onFailure(Exception e) {

Toast.makeText(getApplicationContext(), "add barrier failed", Toast.LENGTH_SHORT).show();

Log.e(TAG, "add barrier failed", e);

}

});

Kotlin示例代码:

val headsetBarrierLabel = "headset connecting barrier"

val builder = BarrierUpdateRequest.Builder()

val request = builder.addBarrier(headsetBarrierLabel, headsetBarrier, pendingIntent).build()

Awareness.getBarrierClient(context).updateBarriers(request)

.addOnSuccessListener { Toast.makeText(applicationContext, "add barrier success", Toast.LENGTH_SHORT).show()

}

.addOnFailureListener { e ->

Toast.makeText(applicationContext, "add barrier failed", Toast.LENGTH_SHORT).show()

Log.e(TAG, "add barrier failed", e)

}

4. 定义广播接收器,用于监听Barrier事件,收到事件后进行应用的业务处理。

Java示例代码:

class HeadsetBarrierReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

BarrierStatus barrierStatus = BarrierStatus.extract(intent);

String label = barrierStatus.getBarrierLabel();

switch(barrierStatus.getPresentStatus()) {

case BarrierStatus.TRUE:

Log.i(TAG, label + " status:true");

break;

case BarrierStatus.FALSE:

Log.i(TAG, label + " status:false");

break;

case BarrierStatus.UNKNOWN:

Log.i(TAG, label + " status:unknown");

break;

}

}

}

Kotlin示例代码:

internal inner class HeadsetBarrierReceiver : BroadcastReceiver() {

override fun onReceive(context: Context, intent: Intent) {

val barrierStatus = BarrierStatus.extract(intent)

val label = barrierStatus.barrierLabel

when (barrierStatus.presentStatus) {

BarrierStatus.TRUE -> Log.i(TAG, "$label status:true")

BarrierStatus.FALSE -> Log.i(TAG, "$label status:false")

BarrierStatus.UNKNOWN -> Log.i(TAG, "$label status:unknown")

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值