美文网首页Android开发Android进阶之路
Android_SmartDeviceLink_Mobile N

Android_SmartDeviceLink_Mobile N

作者: 勇敢写信 | 来源:发表于2018-03-23 16:20 被阅读0次

我的博客

Mobile Navigation手机导航和视频流

移动导航允许地图合作伙伴将他们的应用程序带到汽车中,并显示他们的地图,然后方便地转向用户。这个特性在head单元上的行为与普通应用程序不同。主要的差异是
导航应用程序不使用基本的屏幕模板。他们的主要视图是来自设备的视频流。
导航应用程序可以通过二进制流发送音频。这将减弱当前音频源,并且应该用于导航命令。
导航应用程序可以接收来自视频流的触摸事件。
注意:为了使用SDL的移动导航功能,应用程序必须具备Android 4.4 (SDK 19)的最低要求。这是由于使用了Android提供的视频编码器。
和俪安的车机版本号是4.2.2(SDK 17),低于要求的19.

Connecting an app

导航应用程序的第一个不同之处在于,必须在SdlProxyALM的创建中设置导航应用程序的appHMIType。导航应用也是非媒体应用。第二个区别是需要在SdlProxyBuilder中设置的名为securitymanager的属性。如果连接到需要安全视频的核心版本。此属性需要一系列安全管理器类,它们将继承自SdlSecurityBase类。这些安全库由OEMs自己提供,只适用于OEM。这里没有一个通用的安全库。

SdlProxyBuilder.Builder builder = new SdlProxyBuilder.Builder(this,APP_ID, APP_NAME, false, getApplicationContext());
 
Vector<AppHMIType> hmiTypes = new Vector<AppHMIType>();
hmiTypes.add(AppHMIType.NAVIGATION);
builder.setVrAppHMITypes(hmiTypes);
 
List<? extends SdlSecurityBase> securityManagers = new ArrayList();
securityManagers.add(OEMSecurityManager1.class);
securityManagers.add(OEMSecurityManager1.class);
builder.setSdlSecurity(securityManagers);
 
proxy = builder.build();

注意:在编译时,您必须确保包含您希望支持的所有可能的OEM安全管理器。
注册后,应用程序将开始接收回调。一个重要的回调是onOnHMIStatus,它通知应用程序在head单元上当前可见的应用程序。在注册后,hmiLevel将为NONE或BACKGROUND。一旦hmiLevel被head单元设置为FULL,就应该开始流通。

视频输出流

为了从SDL应用程序获取流视频,我们只需要管理一些事情。但是在大多数情况下,库将处理执行视频流的大部分逻辑。

SDLProxyALM

重要的是,我们要创建SDLProxyALM实例,并使用正确的设置来流视频。这已经涵盖了移动导航>的介绍。

SDL Remote Display

SdlRemoteDisplay基类提供了使用SDL开始流的最简单方法。SdlRemoteDisplay由Android的presentation类扩展,并与SDL Android库的其他方面进行了修改。

注意:建议您将其扩展为在服务中使用SDLProxyALM实例的本地类。

扩展这个类给开发人员提供了一个熟悉的、本地的经验来处理屏幕上的布局和事件。

public static class MyDisplay extends SdlRemoteDisplay{
    public MyDisplay(Context context, Display display) {
        super(context, display);
    }
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.sdl);
 
        final Button button1 = (Button) findViewById(R.id.button_1);
 
        button1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.d(TAG, "Received motion event for button1");
            }
        });
    }
}

Managing the Stream

要启动流的惟一方法是将SDLProxyALM实例与SdlRemoteDisplay的扩展结合起来。当应用程序在onOnHMIStatus(OnHMIStatus通知)回调中收到它的第一个HMI_FULL状态时,就会发生这种情况。需要调用的方法是startRemoteDisplayStream

@Override
public void onOnHMIStatus(OnHMIStatus notification) {
    if(notification.getHmiLevel().equals(HMILevel.HMI_FULL)){
        if (notification.getFirstRun()) {
            proxy.startRemoteDisplayStream(getApplicationContext(), MyDisplay.class, null, false);
        }
    }
 
}

Ending the Stream

当HMIStatus返回到HM_NONE时,是时候停止流了。这是通过SDLProxyALM中的方法stopRemoteDisplayStream()实现的。

相关文章

  • Android_SmartDeviceLink_Mobile N

    我的博客 Mobile Navigation手机导航和视频流 移动导航允许地图合作伙伴将他们的应用程序带到汽车中,...

  • 难(nàn/nǎn)

    距离上篇文章已经两天了。 两天,四十八小时,两千八百八十分钟,十七万二千八百秒……发生了很多事。 在一天的勤奋后,...

  • 3D

    3D类似2D的加强版 matrix3d(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n)Defin...

  • 无标题文章

    提前祝群里所有的朋友 ((((元旦快[乐])))) �n�n�n�n�n�n�n�n�n�n�n�n 圆圆满...

  • 顺利的配对经历

    <<Çā'n'ga'nşēn'>> Şò çēn' çu dò ki, guà'n çā'n' ga'n' nà ...

  • 关于算法的时间复杂度的排序

    O(1)

  • awk多列求和

    awk '{for(n=1;n<=NF;n++)t[n]+=$n}END{for(n=1;n<=NF;n++)pr...

  • 难(nán)!

    这几天他们都上学去了。(所在地:武汉) 我中考之后,报的是江夏区的学校,由于江夏的一些疫情原因,由原来的28、29...

  • 无标题文章

    n. n n. n n . nnnnw

  • js逗号记数法

    formatNumber :function(s, n) {n = n >= 0 && n <= 20 ? n :...

网友评论

    本文标题:Android_SmartDeviceLink_Mobile N

    本文链接:https://www.haomeiwen.com/subject/qryxcftx.html