Android_SmartDeviceLink_Remote Control

我的博客

Remote Control远程控制

远程控制提供了一个框架,允许应用程序控制车辆内的某些安全模块

注意:并不是所有的车辆都有这种功能。即使它们支持远程控制,您也可能需要请求汽车制造商的许可权限才能使用它。
考虑一下的场景:

  • 一个无线电应用程序想要调用车载无线电调谐器。它需要来选择无线电波段(AM/FM/XM/HD/DAB),调整无线电频率或改变电台,以及获得一般无线电信息等功能作决策。
  • 一个气候控制应用需要打开空调,控制空气流通模式,改变风扇转速,设定所需的舱内温度。
  • 用户概要文件应用程序希望记住用户最喜欢的设置,并在用户进入相同/另一个车辆时自动应用它。
    目前,远程控制功能支持这些模块:


    Android_SmartDeviceLink_Remote Control_第1张图片
    image.png

下表列出了每个控制模块中的控制项。


Android_SmartDeviceLink_Remote Control_第2张图片
image.png

Android_SmartDeviceLink_Remote Control_第3张图片
image.png

远程控制还可以允许移动应用程序发送模拟按钮按下事件,以便在车辆中使用以下常用按钮。
系统应列出所有可用RemoteControlCapabilities远程控制按钮。capability对象将有一个可通过getbuttoncapability()获得的buttoncapability列表


Android_SmartDeviceLink_Remote Control_第4张图片
image.png

Android_SmartDeviceLink_Remote Control_第5张图片
image.png

Integration综合

对于远程控制工作,头单元必须支持SDL核心版本4.4或更新。

SYSTEM CAPABILITY

在使用任何远程控制rpc之前,您必须检查head单元是否具有远程控制能力。当您可能遇到不支持它的头部单位时,此检查非常重要。
要检查此功能,请使用以下调用:

 // First you can check to see if the capability is supported on the module
    if (proxy.isCapabilitySupported(SystemCapabilityType.REMOTE_CONTROL){
        // Since the module does support this capability we can query it for more information
        proxy.getCapability(SystemCapabilityType.REMOTE_CONTROL, new OnSystemCapabilityListener(){
 
            @Override
            public void onCapabilityRetrieved(Object capability){
                RemoteControlCapabilities remoteControlCapabilities = (RemoteControlCapabilities) capability;
                // Now it is possible to get details on how this capability 
                // is supported using the remoteControlCapabilities object
            }
 
            @Override
            public void onError(String info){
                Log.i(TAG, "Capability could not be retrieved: "+ info);
            }
        });
    }

GETTING DATA

可以检索与这些远程控制模块相关的当前数据。数据可以用来存储设置之前的设置,保存用户的首选项,等等。在检查系统支持远程控制的能力之后,我们可以实际检索数据。下面是一个关于无线电模块获取数据的例子。它也订阅对无线电数据的更新,这将在本指南中稍后讨论。

 GetInteriorVehicleData interiorVehicleData = new GetInteriorVehicleData();
   interiorVehicleData.setModuleType(ModuleType.RADIO);
   interiorVehicleData.setSubscribe(TRUE);
   interiorVehicleData.setOnRPCResponseListener(new OnRPCResponseListener() {
        @Override
        public void onResponse(int correlationId, RPCResponse response) {
            GetInteriorVehicleData getResponse = (GetInteriorVehicleData) response;
            //This can now be used to retrieve data
        }
    });
 
   proxy.sendRPCRequest(interiorVehicleData);

SETTING DATA

当然,设置这些模块的能力是远程控制的重点。设置数据与获取数据类似。下面是一个设置ClimateControlData的例子。

Temperature temp = new Temperature();
    temp.setUnit(TemperatureUnit.FAHRENHEIT);
    temp.setValue((float) 74.1);
 
    ClimateControlData climateControlData = new ClimateControlData();
    climateControlData.setAcEnable(TRUE);
    climateControlData.setAcMaxEnable(TRUE);
    climateControlData.setAutoModeEnable(FALSE);
    climateControlData.setCirculateAirEnable(TRUE);
    climateControlData.setCurrentTemperature(temp);
    climateControlData.setDefrostZone(DefrostZone.FRONT);
    climateControlData.setDualModeEnable(TRUE);
    climateControlData.setFanSpeed(2);
    climateControlData.setVentilationMode(VentilationMode.BOTH);
    climateControlData.setDesiredTemperature(temp);
 
    ModuleData moduleData = new ModuleData();
    moduleData.setModuleType(ModuleType.CLIMATE);
    moduleData.setClimateControlData(climateControlData);
 
    SetInteriorVehicleData setInteriorVehicleData = new SetInteriorVehicleData();
    setInteriorVehicleData.setModuleData(moduleData);
 
    proxy.sendRPCRequest(setInteriorVehicleData);

BUTTON PRESSES

远程控制的另一个独特之处是能够将模拟的按钮按到相关的模块上,模仿硬件本身的按钮。

 ButtonPress buttonPress = new ButtonPress();
    buttonPress.setModuleType(ModuleType.RADIO);
    buttonPress.setButtonName(ButtonName.EJECT);
    buttonPress.setButtonPressMode(ButtonPressMode.SHORT);
 
    proxy.sendRPCRequest(buttonPress);

SUBSCRIBING TO CHANGES 订阅改变

还可以订阅与支持模块相关的数据的更改。要做到这一点,在获取数据的过程中,只需添加setSubscribe(Boolean)
若要取消订阅,请将该请求再次发送到False。设置订阅的代码示例在上面的GET示例中。
对订阅的响应将以通知的形式出现。您可以通过提供给SdlProxyALM对象的IProxyListenerALM接收此通知;当接收到RPC时,将调用ononinteriorvehicle数据的方法。
USING IPROXYLISTENERALM

 @Override
    public void onOnInteriorVehicleData(OnInteriorVehicleData response) {
        //Perform action based on notification
    }

SETTING NOTIFICATION LISTENER

  proxy.addOnRPCNotificationListener(FunctionID.ON_INTERIOR_VEHICLE_DATA, new OnRPCNotificationListener() {
         @Override
         public void onNotified(RPCNotification notification) {
             OnInteriorVehicleData onInteriorVehicleData = (OnInteriorVehicleData)notification;
             //Perform action based on notification
         }
    });

你可能感兴趣的:(Android_SmartDeviceLink_Remote Control)