[Smart Device Link] 화면 등을 만들어 보도록 하겠습니다.
비슷한 시점에 ASCII도 했다SDL 연재.
시뮬레이터 제작 등으로 상당히 상세하게 기재되어 있기 때문이다
이쪽에서도 볼 수 있으면 다양한 지식을 얻을 수 있을 것 같아요.
SDL 화면 정보
SDL 화면은 Android Auto 등과 다르게 표시됩니다.
기본적으로 템플릿을 사용한다고 가정한 것 같습니다.
미리 결정된 화면 구성(이미지, 버튼 등)에 대해 정보를 설정하고 동작을 설정합니다.
개발자의 경우 SDL 터미널 디자인에 신경 쓰지 않고 통일감 있는 디자인 기능을 제공할 수 있다.
※ 내 생각엔 말이 너무 좋은 것 같아.
자유롭게 화면을 만드는 방법(project 모드)도 있지만, 그건 다른 기회에 설명할 수 있습니다.
이번에는 Giithub:SDL의 샘플를 토대로 설명한다.
화면을 만들어 보도록 하겠습니다.
템플릿 설정
아무것도 설정하지 않으면, PredefinedLayout.MEDIA 상태가 설정되어 있습니다.
특정 템플릿을 사용하려면 SetDisplayLayout.setDisplayLayout
로 템플릿을 지정하고 sdlManager.sendRPC
로 등록하십시오.
SdlService.javaprivate void setDisplayGraphicWithTextButtons(){
SetDisplayLayout setDisplayLayoutRequest = new SetDisplayLayout();
//GRAPHIC_WITH_TEXT_AND_SOFTBUTTONSのテンプレートを設定
setDisplayLayoutRequest.setDisplayLayout(PredefinedLayout.GRAPHIC_WITH_TEXTBUTTONS.toString());
setDisplayLayoutRequest.setOnRPCResponseListener(new OnRPCResponseListener() {
@Override
public void onResponse(int correlationId, RPCResponse response) {
//テンプレートの設定に成功した場合
if(((SetDisplayLayoutResponse) response).getSuccess()){
Log.i("SdlService", "Display layout set successfully.");
//ここで画面の設定処理などを記載します。
}else{
Log.i("SdlService", "Display layout request rejected.");
}
});
sdlManager.sendRPC(setDisplayLayoutRequest);
}
사용 가능한 템플릿은??
템플릿은 SDL 터미널에 종속되므로 템플릿을 사용하기 전에 사용 가능한지 확인해야 합니다.
사용 가능한 템플릿은 다음과 같은 방법으로 얻을 수 있습니다.
SdlService.javaprivate void checkTemplateType(){
Object result = sdlManager.getSystemCapabilityManager().getCapability(SystemCapabilityType.DISPLAY);
if( result instanceof DisplayCapabilities){
List<String> templates = ((DisplayCapabilities) result).getTemplatesAvailable();
Log.i("Templete", templates.toString());
}
}
참고로 Manticore의 시뮬레이터에서 사용할 수 있는 모델은 다음과 같다.
※ 하지만 제대로 작동하지 않는 경우도 있습니다.
[DEFAULT, MEDIA, NON-MEDIA, ONSCREEN_PRESETS, NAV_FULLSCREEN_MAP, NAV_KEYBOARD, GRAPHIC_WITH_TEXT, TEXT_WITH_GRAPHIC, TILES_ONLY, TEXTBUTTONS_ONLY, GRAPHIC_WITH_TILES, TILES_WITH_GRAPHIC, GRAPHIC_WITH_TEXT_AND_SOFTBUTTONS, TEXT_AND_SOFTBUTTONS_WITH_GRAPHIC, GRAPHIC_WITH_TEXTBUTTONS, TEXTBUTTONS_WITH_GRAPHIC, LARGE_GRAPHIC_WITH_SOFTBUTTONS, DOUBLE_GRAPHIC_WITH_SOFTBUTTONS, LARGE_GRAPHIC_ONLY]
참조: DisplayCapabilities 클래스 설명
참조: 설계 정보
그림과 텍스트를 설정해 보십시오
이미지 및 텍스트 시작sdlManager.getScreenManager().beginTransaction
sdlManager.getScreenManager().commit
사이에 설정합니다.
표시할 수 있는 문자, 이미지의 위치, 크기 등은 템플릿에 따라 달라지므로 지정할 수 없습니다.
FileType은 이미지를 지정할 때 이미지 유형에 맞는 이미지를 사용합니다.
또한 사용 가능한 이미지도 SDL 터미널에 따라 달라지므로 실제 사용 가능 여부는 템플릿과 마찬가지로 확인해야 합니다.
사용 가능한 이미지는 DisplayCapabilities.getGraphicSupported
에서 확인할 수 있습니다.
SdlService.java
sdlManager.getScreenManager().beginTransaction();
//テキストを登録する場合
//sdlManager.getScreenManager().setTextField1("Hello, this is MainField1.");
//画像を登録する
SdlArtwork artwork = new SdlArtwork("sample01.png", FileType.GRAPHIC_PNG, R.drawable.sample01, true);
sdlManager.getScreenManager().setPrimaryGraphic(artwork);
sdlManager.getScreenManager().commit(new CompletionListener() {
@Override
public void onComplete(boolean success) {
if (success) {
Log.i(TAG, "welcome show successful");
}
}
});
설정 버튼
버튼은 getScreenManager().setSoftButtonObjects
을 사용하여 SoftButonObject를 설정할 수 있습니다.
템플릿에 따라 여러 버튼을 등록할 수 있습니다.
SoftButonObject는 여러 개의 설정을 통해 SoftButonState를 유지합니다.
각도 버튼처럼 디스플레이를 전환하여 사용할 수 있습니다.
버튼은 SoftButtonObject.transitionToNextState
에서 전환할 수 있습니다.
SdlService.java//一つ目のボタンの設定
//一つ目のボタンステート
SoftButtonState softButton01State1 = new SoftButtonState("button01_state1", "button01_state1", null);
//Artworkを設定する事でボタンに画像を貼り付けることも可能
SdlArtwork state_artwork = new SdlArtwork("state2.png", FileType.GRAPHIC_PNG, R.drawable.ic_sdl, true);
SoftButtonState softButton01State2 = new SoftButtonState("button01_state2", "button01_state2", state_artwork);
List<SoftButtonState> softButtonStates = Arrays.asList(softButton01State1, softButton01State2);
SoftButtonObject softButtonObject1 = new SoftButtonObject("softButtonObject01", softButtonStates, softButton01State1.getName(), null);
//二つ目のボタン設定
SoftButtonState softButton02State1 = new SoftButtonState("button02_state1", "button02_state1", null);
SoftButtonObject softButtonObject2 = new SoftButtonObject("softButtonObject02", Collections.singletonList(softButton02State1), softButton02State1.getName(), null);
//二つのボタンを登録する
List<SoftButtonObject> buttons = Arrays.asList(softButtonObject1, softButtonObject2);
sdlManager.getScreenManager().setSoftButtonObjects(buttons);
버튼 이벤트는 SoftButon Object가 생성되거나 setOnEventListener
에 등록할 수 있습니다.
버튼을 누르면 onProess가 호출됩니다.
onEvent는 각 작업에 대해 체크OnButtonEvent.getButtonEventMode
를 통해 호출됨
판단 가능BUTTONUP
또는BUTTONDOWN
.
SdlService.javasoftButtonObject1.setOnEventListener(new SoftButtonObject.OnEventListener() {
@Override
public void onPress(SoftButtonObject softButtonObject, OnButtonPress onButtonPress) {
softButtonObject.transitionToNextState();
}
@Override
public void onEvent(SoftButtonObject softButtonObject, OnButtonEvent onButtonEvent) {
}
});
이번 샘플을 실제로 조작하면 이런 느낌이 들 거예요.
button01_state1을 시작한 후 단추를 누르면 전환됩니다.
button02_state1을 이동할 때 왼쪽 그림을 전환합니다.
참조: 텍스트, 이미지 및 버튼 정보
최후
화면의 제작 방법을 대략적으로 설명하였다.
열심히 작업할 때 SDL 의존 검사(템플릿, 이미지 포맷 등 다양한···)를 많이 넣어서 좀 번거로운 느낌이 든다.
다만, 간단한 시연용 앱을 만들면 이번 내용을 알면 많이 할 수 있을 것 같다.SdlManagerListener
등에서도 기본 부분을 건너뛴 부분이 있어요.
다음에 나는 자동차에서 정보를 얻으려고 한다.
Reference
이 문제에 관하여([Smart Device Link] 화면 등을 만들어 보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/masaya3/items/5b52fe22fa7a8cb2f189
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
private void setDisplayGraphicWithTextButtons(){
SetDisplayLayout setDisplayLayoutRequest = new SetDisplayLayout();
//GRAPHIC_WITH_TEXT_AND_SOFTBUTTONSのテンプレートを設定
setDisplayLayoutRequest.setDisplayLayout(PredefinedLayout.GRAPHIC_WITH_TEXTBUTTONS.toString());
setDisplayLayoutRequest.setOnRPCResponseListener(new OnRPCResponseListener() {
@Override
public void onResponse(int correlationId, RPCResponse response) {
//テンプレートの設定に成功した場合
if(((SetDisplayLayoutResponse) response).getSuccess()){
Log.i("SdlService", "Display layout set successfully.");
//ここで画面の設定処理などを記載します。
}else{
Log.i("SdlService", "Display layout request rejected.");
}
});
sdlManager.sendRPC(setDisplayLayoutRequest);
}
private void checkTemplateType(){
Object result = sdlManager.getSystemCapabilityManager().getCapability(SystemCapabilityType.DISPLAY);
if( result instanceof DisplayCapabilities){
List<String> templates = ((DisplayCapabilities) result).getTemplatesAvailable();
Log.i("Templete", templates.toString());
}
}
sdlManager.getScreenManager().beginTransaction();
//テキストを登録する場合
//sdlManager.getScreenManager().setTextField1("Hello, this is MainField1.");
//画像を登録する
SdlArtwork artwork = new SdlArtwork("sample01.png", FileType.GRAPHIC_PNG, R.drawable.sample01, true);
sdlManager.getScreenManager().setPrimaryGraphic(artwork);
sdlManager.getScreenManager().commit(new CompletionListener() {
@Override
public void onComplete(boolean success) {
if (success) {
Log.i(TAG, "welcome show successful");
}
}
});
//一つ目のボタンの設定
//一つ目のボタンステート
SoftButtonState softButton01State1 = new SoftButtonState("button01_state1", "button01_state1", null);
//Artworkを設定する事でボタンに画像を貼り付けることも可能
SdlArtwork state_artwork = new SdlArtwork("state2.png", FileType.GRAPHIC_PNG, R.drawable.ic_sdl, true);
SoftButtonState softButton01State2 = new SoftButtonState("button01_state2", "button01_state2", state_artwork);
List<SoftButtonState> softButtonStates = Arrays.asList(softButton01State1, softButton01State2);
SoftButtonObject softButtonObject1 = new SoftButtonObject("softButtonObject01", softButtonStates, softButton01State1.getName(), null);
//二つ目のボタン設定
SoftButtonState softButton02State1 = new SoftButtonState("button02_state1", "button02_state1", null);
SoftButtonObject softButtonObject2 = new SoftButtonObject("softButtonObject02", Collections.singletonList(softButton02State1), softButton02State1.getName(), null);
//二つのボタンを登録する
List<SoftButtonObject> buttons = Arrays.asList(softButtonObject1, softButtonObject2);
sdlManager.getScreenManager().setSoftButtonObjects(buttons);
softButtonObject1.setOnEventListener(new SoftButtonObject.OnEventListener() {
@Override
public void onPress(SoftButtonObject softButtonObject, OnButtonPress onButtonPress) {
softButtonObject.transitionToNextState();
}
@Override
public void onEvent(SoftButtonObject softButtonObject, OnButtonEvent onButtonEvent) {
}
});
화면의 제작 방법을 대략적으로 설명하였다.
열심히 작업할 때 SDL 의존 검사(템플릿, 이미지 포맷 등 다양한···)를 많이 넣어서 좀 번거로운 느낌이 든다.
다만, 간단한 시연용 앱을 만들면 이번 내용을 알면 많이 할 수 있을 것 같다.
SdlManagerListener
등에서도 기본 부분을 건너뛴 부분이 있어요.다음에 나는 자동차에서 정보를 얻으려고 한다.
Reference
이 문제에 관하여([Smart Device Link] 화면 등을 만들어 보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/masaya3/items/5b52fe22fa7a8cb2f189텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)