이전 버전에서는 NexacroActivity를 종료하는 경우 앱이 종료되는 제약을 가지고 있습니다. 이를 보완하기 위해 2개 이상의 NexacroActivity를 관리할 수 있도록 기능을 보완했습니다.
간략하게 기능 설명을 위해 넥사크로 Form에서 Application 생성을 요청하는 방식을 사용했습니다. 아래 내용에서는 4가지 내용을 다룹니다.
MainActivity.java: NexacroUpdatorActivity 파생 클래스 설정
ExampleActivity.java: NexacroActivity 파생 클래스 설정
AndroidManifest.xml: droidManifest.xml 설정
Form.xfdl: 넥사크로 Form에서 Application 호출
MainActivity.java
NexacroUpdatorActivity 파생 클래스인 MainActivity.java 코드 작성 시 아래와 같이 추가 인터페이스를 작성해주어야 합니다.
기존 방식처럼 createInstance 를 사용하는 방법과 Application에서 Resource Manager를 가져와서 처리하는 방법 2가지 모두 사용할 수 있습니다.
... @Override public void onCreate(Bundle savedInstanceState) { NexacroResourceManager resourceManager = NexacroResourceManager.createInstance(this); resourceManager.setBootstrapURL("http://[URL]/start_android.json"); resourceManager.setProjectURL("http://[URL]/"); //resourceManager.setContentMode(true); //resourceManager.setFDL("FrameBase::Form_Work.xfdl"); ... }
... @Override public void onCreate(Bundle savedInstanceState) { // naxacro 초기화 Nexacro nexacro = Nexacro.getInstance(this); if (!nexacro.isInitialized()) nexacro.initialize(); // Application 생성 NexacroApplication application = nexacro.newApplication(); // Resource Manager 설정 NexacroResourceManager resourceManager = application.getResourceManager(); resourceManager.setBootstrapURL("http://[URL]/start_android.json"); resourceManager.setProjectURL("http://[URL]/"); //resourceManager.setContentMode(true); //resourceManager.setFDL("FrameBase::Form_Work.xfdl"); ... }
MainActivity 실행 시 특정 폼을 실행하고자 한다면 아래와 같이 setContentMode 함수에서 true 값을 설정하고 setFDL 함수에 form 파일명을 지정합니다.
public void onCreate(Bundle savedInstanceState) { ... resourceManager.setContentMode(true); resourceManager.setFDL("FrameBase::Form_Work.xfdl"); ...
ExampleActivity.java
NexacroActivity 파생 클래스인 ExampleActivity.java 코드는 아래와 같이 작성할 수 있습니다. 아래 예제는 넥사크로 Form에서 system.execBrowser 메소드를 사용해 특정 Form 이름을 넘겨주고 이를 받아서 Application을 생성합니다.
public class ExampleActivity extends NexacroActivity { @Override public void onCreate(Bundle savedInstanceState) { // Intent로 부터 호출할 FDL 이름을 확인 Uri data = getIntent().getData(); String formName = data.getHost(); // 설정한 이름(key)으로 nexacro application을 생성 createNexacroApplication(formName); // Resource Manager 설정 NexacroResourceManager resourceManager = getNexacroApplication().getResourceManager(); resourceManager.setBootstrapURL("http://[URL]/start_android.json"); resourceManager.setProjectURL("http://[URL]/"); resourceManager.setContentMode(true); resourceManager.setFDL("FrameBase::" + formName + ".xfdl"); super.onCreate(savedInstanceState); } }
AndroidManifest.xml
기존에는 NexacroUpdatorActivity 파생 클래스(nexacro.launcher.MainActivity)만 설정했으나 아래와 같이 NexacroActivity 파생 클래스(nexacro.launcher.ExampleActivity)를 설정할 수 있습니다.
... <activity android:name="nexacro.launcher.ExampleActivity" android:windowSoftInputMode="adjustResize" android:theme="@style/Theme.AppCompat.Light.NoActionBar" android:configChanges="orientation|keyboardHidden|screenSize"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="nexacro"/> </intent-filter> </activity> ...
Form.xfdl
넥사크로 Form에서는 아래와 같이 system.execBrowser 메소드를 사용해 폼 이름을 넘겨주고 NexacroActivity에서 특정 폼을 실행할 수 있도록 합니다. "nexacro"라는 스키마명은 AndroidManifest.xml에서 설정한 이름입니다.
this.Button01_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo) { system.execBrowser("nexacro://Sample"); };
NexacroActivity에서 실행된 폼은 독립된 Application으로 동작하기 때문에 exit 메소드를 실행하면 해당 Activity만 종료합니다.
this.Button01_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo) { nexacro.getApplication().exit(); };