System Capability Manager系统功能管理器
系统能力管理器是获取当前连接模块功能的中心位置。特定的功能将会返回给一些给定的键。它还减轻了来自RegisterAppInterface响应或新SystemCapabilityQuery的单个缓存结果的需要。
可以检索多种功能。
image.png
Querying Capabilities
从连接模块接收到第一个OnHMIStatus通知后,您可以访问SystemCapability manager及其数据。您的SdlProxyALM实例将有与## SystemCapabilityManager绑定的便利方法。
注意:在使用功能之前,查询功能是很重要的。你的应用可以在不同的制造商和软件版本的不同的头单位使用。永远不要假设有能力存在。
例如(获得头部单位的导航能力):
// First you can check to see if the capability is supported on the module
if (proxy.isCapabilitySupported(SystemCapabilityType.NAVIGATION){
// Since the module does support this capability we can query it for more information
proxy.getCapability(SystemCapabilityType.NAVIGATION, new OnSystemCapabilityListener(){
@Override
public void onCapabilityRetrieved(Object capability){
NavigationCapability navCapability = (NavigationCapability) capability;
// Now it is possible to get details on how this capability
// is supported using the navCapability object
}
@Override
public void onError(String info){
Log.i(TAG, "Capability could not be retrieved: "+ info);
}
});
}
返回的功能需要被转换成您所请求的能力类型。从那里你可以确定应用程序连接的头单元是否可以使用一个功能。
Capability Lists
目前有3个响应作为列表返回:AUDIO_PASSTHROUGH、BUTTON和SOFTBUTTON。我们已经在SystemCapabilityManager中创建了一个方法来帮助转换这些列表。下面是它的用法示例:
public void getCapabilities() {
proxy.getCapability(SystemCapabilityType.BUTTON, new OnSystemCapabilityListener(){
@Override
public void onCapabilityRetrieved(Object capability){
List<ButtonCapabilities> buttonCapabilityList = SystemCapabilityManager.convertToList(capability, ButtonCapabilities.class);
}
@Override
public void onError(String info){
Log.i(TAG, "Capability could not be retrieved: "+ info);
}
});
}
此方法防止开发人员出现警告,同时创建安全的方法将对象转换为列表。
Asynchronous vs Synchronous Queries
一些功能将在第一个OnHMIStatus通知后立即可用。这些从RegisterAppInterface响应中解析。但是,必须异步获取某些功能,因此需要获得回调。如果一个功能可以同步检索,另一个方法可以通过SdlProxyALM对象,proxy.getCapability(SystemCapabilityType)来使用。
image.png
网友评论