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")
}
}
}
總結
以上是生活随笔為你收集整理的android 情景感知 sdk,情景感知服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux shutter截图,Ubun
- 下一篇: 概括鸿蒙系统的优势,从开发语言分析鸿蒙系