Create a new project with Empty Activity.
Add Android viewer library and license file to your project as illustrated below. Your instructor will provide the license file.
For API levels before 28 that contain no androidx
implementation, you have to add android-support-v4.jar
to the libs and dependencies.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.forcs.android">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/Theme.Android">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.NFC" />
</manifest>
plugins {
id 'com.android.application'
}
android {
compileSdk 31
defaultConfig {
applicationId "com.forcs.android"
minSdk 21
targetSdk 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
implementation files('libs/ozrv_android.jar')
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}MainActivity.java
Add menu_main.xml in res/menu folder.
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.forcs.android.MainActivity">
<item android:id="@+id/action_btn1"
android:title="Submit"
app:showAsAction="always" />
</menu>
package com.forcs.android;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.FrameLayout;
// import OZ Viewer API
import oz.api.OZReportAPI;
import oz.api.OZReportCommandListener;
import oz.api.OZReportViewer;
public class MainActivity extends AppCompatActivity {
// Load OZ Viewer library
static {
try {
System.loadLibrary("skia_android");
System.loadLibrary("ozrv");
} catch (Exception e) {
Log.e("OZRV", "Cannot load OZ Viewer library");
e.printStackTrace();
}
}
private FrameLayout mLayout; // declare content view for OZ Viewer
private OZReportViewer mViewer; // declare OZ Viewer
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLayout = new FrameLayout(this);
setContentView(mLayout);
openViewer();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_btn1:
submit();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void openViewer() {
closeViewer();
String params = "connection.servlet=http://oz.ozeform.io/oz/server";
params += "\n" + "connection.reportname=demo/customer.ozr";
mViewer = OZReportAPI.createViewer(mLayout, new OZReportCommandListener() {}, params);
}
private void closeViewer() {
if(mViewer != null) {
mViewer.dispose();
mViewer = null;
}
}
private void submit() {
String result = mViewer.GetInformation("INPUT_CHECK_VALIDITY");
if (result.equals("valid")) {
String data = mViewer.GetInformation("INPUT_JSON_ALL");
dialogBox(data);
}
}
private void dialogBox(String data) {
AlertDialog.Builder dialog=new AlertDialog.Builder(this);
dialog.setMessage(data);
dialog.setTitle("Input Data");
dialog.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
return;
}
});
AlertDialog alertDialog=dialog.create();
alertDialog.show();
}
@Override
protected void onDestroy() {
super.onDestroy();
closeViewer();
}
}