Android_SmartDeviceLink_Remote Control

我的博客

Remote Control远程控制

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

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

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


    image.png

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


image.png

image.png

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


image.png

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
         }
    });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,871评论 6 13
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,633评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,468评论 19 139
  • 杨老板到访,hb兴奋一天,待客热情的很,干杯,给吃的,让坐板凳,让人抱抱,不吝啬自己的东西,一直精神都很好,陪吃饭...
    ebf8bf373fdf阅读 1,131评论 0 0
  • /小雨文图 眼睛,温柔拂过 笑容,爬上眉梢 阳光,漫过心上 所有的欢愉 只是因为 我在转身的瞬间 多看了你一眼
    小雨飘飘阅读 1,872评论 4 6