[Smart Device Link] 시작 모드 시도

10400 단어 SDLAndroid
자유롭게 화면을 만들 수 있는 투영 모드를 설명하고 싶습니다.
※ 다만, 유감스럽게도 이런 패턴은 SDL의 취지에서 벗어난 것 같습니다.

프로젝트 모드는?


간단하게 말하면 템플릿처럼 SDL 측면에서 화면을 생성하는 것은 아니다
이것은 안드로이드 측면의 화면을 스트리밍 방식으로 표시하는 방법이다.
따라서 안드로이드의 개발과 같은 방법으로 화면을 디자인할 수 있다.
SDL 단일 항목으로 재생하기 어려운 애니메이션도 가능합니다.
이번에는 이쪽 Giithub:SDL의 샘플을 바탕으로 설명합니다.
참고: 프로젝트 모드는 MantiCore 시뮬레이터에서 실행되지 않습니다.
동작을 보려면 SDL 어플리케이션 개발 키트 "SDL DEVELOPMENT TOOLS"가 필요합니다.

화면을 만들다


디자인 화면
특별한 직업이 없다.
안드로이드 스튜디오의 Layout Editor로 화면을 만듭니다.
사용 가능한 제어에 제한이 있을 수 있습니다
Video View, TextureView, WebView 등도 움직이고 있다.
참고: ImageView를 통해 이미지를 설정할 때 사용app:srcCompat제대로 표시되지 않는 것 같습니다.src에서 이미지를 설정하십시오.

화면을 만들다
표시된 화면은 계승SdlRemoteDisplay으로 제작됐다.setContentView(R.layout.remote_display)에서 제작된 화면 레이아웃만 설정하면 된다.
SdlService.java
public static class RemoteDisplay extends SdlRemoteDisplay {

    public RemoteDisplay(Context context, Display display) {
        super(context, display);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.remote_display);
    }
}
버튼 이벤트 만들기
일반적인 안드로이드 개발과 동일한 제어 방법
여기 설명 안 해.
주의해야 할 것은 단추 조작 중 OnClickListener 이벤트가 발생하지 않는다는 것이다.
기본적으로OnTouchListener 유효하다.
SdlService.java

final TextView textView = (TextView)this.findViewById(R.id.textView);

Button button01 = (Button)this.findViewById(R.id.button01);
button01.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        //このToastは、SDL側ではなくスマホ側で表示されます。
        Toast.makeText(view.getContext(),"Touch event received: " + motionEvent.getX(),Toast.LENGTH_SHORT).show();
        switch (motionEvent.getAction()){
            case MotionEvent.ACTION_DOWN:
                textView.setText("Hello SDL");
                break;
        }
        return true;
    }
});
AppHMIType 설정
AppHMIType을 NAVIGATION로 설정하십시오.MEDIA 상태를 유지하면 제대로 출력할 수 없습니다.
SdlService.java
Vector<AppHMIType> appType = new Vector<>();
appType.add(AppHMIType.NAVIGATION);
투영 시작 모드startRemoteDisplayStream 이후 화면은 SDL 터미널로 전송됩니다.SdlManager.start가 성공한 후에 반드시 호출하여 처리를 시작하십시오.
참고:startRemoteDisplayStream의 세 번째 매개변수인 parameter는 화면 크기 등을 지정합니다.null시 최적 값이 자동으로 설정됩니다.
실제로 보면 이런 느낌이에요.

자세히 보면 길어 보이지 않나요?
SDL 어플리케이션 개발 키트 "SDL DEVELOPMENT TOOLS"의 디렉터리 규격에서 너비는 800px, 세로 480px이지만 너비는 800px, 세로 350px로 왜 세로 길이로 표시되는지 모르겠다.
정확한 출력을 위해 정확한 값을 강제로 설정합니다.
SdlService.java

VideoStreamingParameters parameters = new VideoStreamingParameters();
parameters.getResolution().setResolutionWidth(800);
parameters.getResolution().setResolutionHeight(480);

sdlManager.getVideoStreamManager().startRemoteDisplayStream(getApplicationContext(), RemoteDisplay.class, parameters, false);
이 설정은 올바른 너비로 표시됩니다.

그러나 터치할 수 없는 위치에 대응할 수 없을 것 같아 세로 터치 위치가 옮겨진다.
나는 많은 것을 시도했지만 해결 방법을 찾지 못했다.
뭘 알았으면 내가 다시 보충할게.
투영 모드 종료
SDL 종료 시에는 반드시 stopStreaming해야 합니다.
SdlService.java
sdlManager.getVideoStreamManager().stopStreaming();
실제로 행동해 보세요.
이것은 텍스트와 그림을 전환하는 데 사용되는 간단한 설명입니다.
스트리밍이라 반응이 느려요.

참조: VideoStreaming

보태다


템플릿과 투영 모드를 전환할 수 있습니까?
간단하지만 검증해 봤어요.
※ 추측하는 부분이 있으니 주의하세요.
템플릿만 있으면 템플릿을 전환할 수 있습니다
현재 템플릿과 투영 모드를 전환할 수 없습니다.
구성 프로젝트SdlRemoteDisplay는 Dialog를 기반으로 제작되었습니다.dismiss 또는 dismissPresentation에서 Dialog 닫기 호출
SDL 어플리케이션 개발 키트 "SDL DEVELOPMENT TOOLS"를 닫을 수 없습니다.
참고로 프로젝트 디스플레이에서 템플릿을 호출할 수 있습니다.
보충:
정확히 말하면 SDL 등급의 전환은 대응할 수 있다.
사용SDL 어플리케이션 개발 키트 "SDL DEVELOPMENT TOOLS"은 지원되지 않을 수 있습니다.

최후


투영 모드가 인기가 많기 때문에 먼저 투영 모드를 설명했다.
다음에 차 데이터 얻으려고요.

좋은 웹페이지 즐겨찾기