Androidで1つ以上のNexacroActivityを用いたコード作成

17.1.2.500バージョンに追加された機能です。

一部の機能は変更されることがあり、マニュアルも補足されることがあります。

以前のバージョンでは、NexacroActivityを終了するとアプリが終了する制約がありました。従って、2つ以上のNexacroActivityを管理できる機能を補完しました。

簡略化して機能を説明するためにnexacro platfromのFormでApplicationを作成する方法を使用しました。下記では4つの内容について説明します。

MainActivity.java

NexacroUpdatorActivityの派生クラスであるMainActivity.javaコードの作成の際、下記のように追加インターフェイスを作成する必要があります。

従来のようにcreateInstanceを使用する方法と、ApplicationのResource Managerで処理する方法を使用することができます。

...
@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コードは下記のように作成できます。下記の例は、nexacro platformの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

nexacro platformのFormでは、下記のようにsystem.execBrowserメソッドを使用してForm名を渡し、NexacroActivityで特定のFormを実行できるようにします。"nexacro"というスキーマ名はAndroidManifest.xmlに設定されている名前です。

this.Button01_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	system.execBrowser("nexacro://Sample");
};

NexacroActivityで実行されたFormは、独立したApplicationとして動作するため、exitメソッドを実行すると、該当Activityのみ終了します。

this.Button01_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	nexacro.getApplication().exit();
};