Sunday, 15 July 2018

Mantra (MFS 100) Biometric Android Example


Out Put:





Creating a New Project
  • First, we will create a new Android Studio Project.


Adding Jar File
  • Now download the mantra.mfs100.jar. We need to add this file in our project dependencies.
  • So first on the project explorer select Project.
  • Then inside app/lib paste the mantra.mfs100.jar that we downloaded.
  • Then add dependency in your build.gradle.


implementation files('libs/mantra.mfs100.jar')

Adding jniLibs Folder
  • ·                     jniLibs.jar
  • ·                     Download jinLibs.jar file And then Extract.
  • ·                     Put jniLibs folder src/main/



mantra.mfs100.jar

·                     mantra.mfs100.jar it is inside the lib folder app/lib/

 build.gradle

apply plugin: 'com.android.application'

android {

    compileSdkVersion 26

    defaultConfig {

        applicationId "com.jainishprajapati.biometricexample"

        minSdkVersion 15

        targetSdkVersion 26

        versionCode 1

        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"



        ndk {

            abiFilters "armeabi-v7a", "x86"

        }

    }

    buildTypes {

        release {

            minifyEnabled false

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }

    }

    repositories {

        flatDir {

            dirs 'libs'

        }

    }

    //JNI Lib Declaration

    sourceSets.main {

        jniLibs.srcDirs 'src/main/jniLibs'

    }

}



dependencies {

    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:26.1.0'

    implementation 'com.android.support.constraint:constraint-layout:1.1.2'

    testImplementation 'junit:junit:4.12'

    implementation files('libs/mantra.mfs100.jar')

}

string.xml

<resources>

    <string name="app_name">BioMetricExample</string>

    <string name="action_settings">Settings</string>

    <string name="app_title">MANTRA-MFS100-TEST</string>

    <string name="Init">INIT</string>

    <string name="UnInit">UNINIT</string>

    <string name="ExtractISO">ISO(FMR)</string>

    <string name="ExtractWSQ">WSQ</string>

    <string name="MatchISO">MATCH ISO</string>

    <string name="foorLoop">Init/Uninit</string>

    <string name="ClearLog">CLEAR LOG</string>

    <string name="SyncCapture">CAPTURE</string>

    <string name="StopSyncCapture">STOP CAP</string>

    <string name="WriteBit">Write Bit</string>

    <string name="ReadBit">Read Bit</string>

    <string name="ChangeKey">Change Key</string>

    <string name="GetKey">Get Key</string>



    <string-array name="MFS100Ver">

        <item>41</item>

        <item>31</item>

    </string-array>



    <string name="title_activity_preference">Preference</string>

</resources>

styles.xml

<style name="title">

    <item name="android:padding">0dp</item>

    <item name="android:layout_margin">1dp</item>

    <item name="android:textColor">#FFFFFF </item>

</style>



<style name="message">

    <item name="android:padding">0dp</item>

    <item name="android:layout_margin">1dp</item>

    <item name="android:textColor">#000000 </item>

</style>



<style name="button">

    <item name="android:padding">0dp</item>

    <item name="android:layout_width">86dp</item>

    <item name="android:layout_height">35dp</item>

    <item name="android:layout_margin">1dp</item>

    <item name="android:textColor">#FFFFFF </item>

</style>



<style name="buttonbig">

    <item name="android:layout_width">match_parent</item>

    <item name="android:layout_height">35dp</item>

    <item name="android:layout_margin">1dp</item>

    <item name="android:textColor">#FFFFFF </item>

</style>



<style name="buttonbig2">

    <item name="android:layout_width">0dp</item>

    <item name="android:layout_weight">1</item>

    <item name="android:layout_height">35dp</item>

    <item name="android:layout_margin">1dp</item>

    <item name="android:textColor">#FFFFFF </item>

</style>



<style name="buttonfull">

    <item name="android:padding">0dp</item>

    <item name="android:layout_height">35dp</item>

    <item name="android:layout_margin">1dp</item>

    <item name="android:textColor">#FFFFFF </item>

</style>



<style name="Theme.Transparent" parent="android:Theme">

    <item name="android:windowIsTranslucent">true</item>

    <item name="android:windowBackground">@android:color/transparent</item>

    <item name="android:windowContentOverlay">@null</item>

    <item name="android:windowNoTitle">true</item>

    <item name="android:windowIsFloating">true</item>

    <item name="android:backgroundDimEnabled">false</item>

</style>


xml/config.xml

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <ListPreference android:dialogTitle="MFS100 Version" android:key="MFSVer" android:title="MFS100 Version" android:defaultValue="41" android:entries="@array/MFS100Ver" android:entryValues="@array/MFS100Ver"/>    

</PreferenceScreen>

xml/device_config.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <usb-device vendor-id="1204" product-id="34323" />

    <usb-device vendor-id="11279" product-id="4101" />

</resources>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.jainishprajapati.biometricexample">



    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.USB_PERMISSION" />



    <application

        android:allowBackup="true"

        android:icon="@mipmap/ic_launcher"

        android:label="@string/app_name"

        android:roundIcon="@mipmap/ic_launcher_round"

        android:supportsRtl="true"

        android:theme="@style/AppTheme">

        <activity android:name=".MFS100Test"

            android:configChanges="orientation|screenSize|keyboardHidden">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />



                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>



</manifest>

MFS100Test.java
 
package com.jainishprajapati.biometricexample;



import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import android.os.Environment;

import android.util.Log;

import android.view.View;

import android.view.WindowManager;

import android.widget.Button;

import android.widget.CheckBox;

import android.widget.EditText;

import android.widget.ImageView;

import android.widget.TextView;

import android.widget.TextView.BufferType;

import android.widget.Toast;



import com.mantra.mfs100.FingerData;

import com.mantra.mfs100.MFS100;

import com.mantra.mfs100.MFS100Event;



import java.io.File;

import java.io.FileOutputStream;



public class MFS100Test extends Activity implements MFS100Event {



    Button btnInit;

    Button btnUninit;

    Button btnSyncCapture;

    Button btnStopCapture;

    Button btnMatchISOTemplate;

    Button btnExtractISOImage;

    Button btnExtractAnsi;

    Button btnExtractWSQImage;

    Button btnClearLog;

    TextView lblMessage;

    EditText txtEventLog;

    ImageView imgFinger;

    CheckBox cbFastDetection;



    private enum ScannerAction {

        Capture, Verify

    }



    byte[] Enroll_Template;

    byte[] Verify_Template;

    private FingerData lastCapFingerData = null;

    ScannerAction scannerAction = ScannerAction.Capture;



    int timeout = 10000;

    MFS100 mfs100 = null;



    private boolean isCaptureRunning = false;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_mfs100_sample);



        FindFormControls();

        try {

            this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

        } catch (Exception e) {

            Log.e("Error", e.toString());

        }

    }



    @Override

    protected void onStart() {

        if (mfs100 == null) {

            mfs100 = new MFS100(this);

            mfs100.SetApplicationContext(MFS100Test.this);

        } else {

            InitScanner();

        }

        super.onStart();

    }



    protected void onStop() {

        UnInitScanner();

        super.onStop();

    }



    @Override

    protected void onDestroy() {

        if (mfs100 != null) {

            mfs100.Dispose();

        }

        super.onDestroy();

    }



    public void FindFormControls() {

        btnInit = (Button) findViewById(R.id.btnInit);

        btnUninit = (Button) findViewById(R.id.btnUninit);

        btnMatchISOTemplate = (Button) findViewById(R.id.btnMatchISOTemplate);

        btnExtractISOImage = (Button) findViewById(R.id.btnExtractISOImage);

        btnExtractAnsi = (Button) findViewById(R.id.btnExtractAnsi);

        btnExtractWSQImage = (Button) findViewById(R.id.btnExtractWSQImage);

        btnClearLog = (Button) findViewById(R.id.btnClearLog);

        lblMessage = (TextView) findViewById(R.id.lblMessage);

        txtEventLog = (EditText) findViewById(R.id.txtEventLog);

        imgFinger = (ImageView) findViewById(R.id.imgFinger);

        btnSyncCapture = (Button) findViewById(R.id.btnSyncCapture);

        btnStopCapture = (Button) findViewById(R.id.btnStopCapture);

        cbFastDetection = (CheckBox) findViewById(R.id.cbFastDetection);

    }



    public void onControlClicked(View v) {



        switch (v.getId()) {

            case R.id.btnInit:

                InitScanner();

                break;

            case R.id.btnUninit:

                UnInitScanner();

                break;

            case R.id.btnSyncCapture:

                scannerAction = ScannerAction.Capture;

                if (!isCaptureRunning) {

                    StartSyncCapture();

                }

                break;

            case R.id.btnStopCapture:

                StopCapture();

                break;

            case R.id.btnMatchISOTemplate:

                scannerAction = ScannerAction.Verify;

                if (!isCaptureRunning) {

                    StartSyncCapture();

                }

                break;

            case R.id.btnExtractISOImage:

                ExtractISOImage();

                break;

            case R.id.btnExtractAnsi:

                ExtractANSITemplate();

                break;

            case R.id.btnExtractWSQImage:

                ExtractWSQImage();

                break;

            case R.id.btnClearLog:

                ClearLog();

                break;

            default:

                break;

        }

    }



    private void InitScanner() {

        try {

            int ret = mfs100.Init();

            if (ret != 0) {

                SetTextOnUIThread(mfs100.GetErrorMsg(ret));

            } else {

                SetTextOnUIThread("Init success");

                String info = "Serial: " + mfs100.GetDeviceInfo().SerialNo()

                        + " Make: " + mfs100.GetDeviceInfo().Make()

                        + " Model: " + mfs100.GetDeviceInfo().Model()

                        + "\nCertificate: " + mfs100.GetCertification();

                SetLogOnUIThread(info);

            }

        } catch (Exception ex) {

            Toast.makeText(this, "Init failed, unhandled exception",

                    Toast.LENGTH_LONG).show();

            SetTextOnUIThread("Init failed, unhandled exception");

        }

    }



    private void StartSyncCapture() {

        new Thread(new Runnable() {



            @Override

            public void run() {

                SetTextOnUIThread("");

                isCaptureRunning = true;

                try {

                    FingerData fingerData = new FingerData();

                    int ret = mfs100.AutoCapture(fingerData, timeout, cbFastDetection.isChecked());

                    Log.e("StartSyncCapture.RET", ""+ret);

                    if (ret != 0) {

                        SetTextOnUIThread(mfs100.GetErrorMsg(ret));

                    } else {

                        lastCapFingerData = fingerData;

                        final Bitmap bitmap = BitmapFactory.decodeByteArray(fingerData.FingerImage(), 0,

                                fingerData.FingerImage().length);

                        MFS100Test.this.runOnUiThread(new Runnable() {

                            @Override

                            public void run() {

                                imgFinger.setImageBitmap(bitmap);

                            }

                        });



                        SetTextOnUIThread("Capture Success");

                        String log = "\nQuality: " + fingerData.Quality()

                                + "\nNFIQ: " + fingerData.Nfiq()

                                + "\nWSQ Compress Ratio: "

                                + fingerData.WSQCompressRatio()

                                + "\nImage Dimensions (inch): "

                                + fingerData.InWidth() + "\" X "

                                + fingerData.InHeight() + "\""

                                + "\nImage Area (inch): " + fingerData.InArea()

                                + "\"" + "\nResolution (dpi/ppi): "

                                + fingerData.Resolution() + "\nGray Scale: "

                                + fingerData.GrayScale() + "\nBits Per Pixal: "

                                + fingerData.Bpp() + "\nWSQ Info: "

                                + fingerData.WSQInfo();

                        SetLogOnUIThread(log);

                        SetData2(fingerData);

                    }

                } catch (Exception ex) {

                    SetTextOnUIThread("Error");

                } finally {

                    isCaptureRunning = false;

                }

            }

        }).start();

    }



    private void StopCapture() {

        try {

            mfs100.StopAutoCapture();

        } catch (Exception e) {

            SetTextOnUIThread("Error");

        }

    }



    private void ExtractANSITemplate() {

        try {

            if (lastCapFingerData == null) {

                SetTextOnUIThread("Finger not capture");

                return;

            }

            byte[] tempData = new byte[2000]; // length 2000 is mandatory

            byte[] ansiTemplate;

            int dataLen = mfs100.ExtractANSITemplate(lastCapFingerData.RawData(), tempData);

            if (dataLen <= 0) {

                if (dataLen == 0) {

                    SetTextOnUIThread("Failed to extract ANSI Template");

                } else {

                    SetTextOnUIThread(mfs100.GetErrorMsg(dataLen));

                }

            } else {

                ansiTemplate = new byte[dataLen];

                System.arraycopy(tempData, 0, ansiTemplate, 0, dataLen);

                WriteFile("ANSITemplate.ansi", ansiTemplate);

                SetTextOnUIThread("Extract ANSI Template Success");

            }

        } catch (Exception e) {

            Log.e("Error", "Extract ANSI Template Error", e);

        }

    }



    private void ExtractISOImage() {

        try {

            if (lastCapFingerData == null) {

                SetTextOnUIThread("Finger not capture");

                return;

            }

            byte[] tempData = new byte[(mfs100.GetDeviceInfo().Width() * mfs100.GetDeviceInfo().Height()) + 1078];

            byte[] isoImage;

            int dataLen = mfs100.ExtractISOImage(lastCapFingerData.RawData(), tempData);

            if (dataLen <= 0) {

                if (dataLen == 0) {

                    SetTextOnUIThread("Failed to extract ISO Image");

                } else {

                    SetTextOnUIThread(mfs100.GetErrorMsg(dataLen));

                }

            } else {

                isoImage = new byte[dataLen];

                System.arraycopy(tempData, 0, isoImage, 0, dataLen);

                WriteFile("ISOImage.iso", isoImage);

                SetTextOnUIThread("Extract ISO Image Success");

            }

        } catch (Exception e) {

            Log.e("Error", "Extract ISO Image Error", e);

        }

    }



    private void ExtractWSQImage() {

        try {

            if (lastCapFingerData == null) {

                SetTextOnUIThread("Finger not capture");

                return;

            }

            byte[] tempData = new byte[(mfs100.GetDeviceInfo().Width() * mfs100.GetDeviceInfo().Height()) + 1078];

            byte[] wsqImage;

            int dataLen = mfs100.ExtractWSQImage(lastCapFingerData.RawData(), tempData);

            if (dataLen <= 0) {

                if (dataLen == 0) {

                    SetTextOnUIThread("Failed to extract WSQ Image");

                } else {

                    SetTextOnUIThread(mfs100.GetErrorMsg(dataLen));

                }

            } else {

                wsqImage = new byte[dataLen];

                System.arraycopy(tempData, 0, wsqImage, 0, dataLen);

                WriteFile("WSQ.wsq", wsqImage);

                SetTextOnUIThread("Extract WSQ Image Success");

            }

        } catch (Exception e) {

            Log.e("Error", "Extract WSQ Image Error", e);

        }

    }



    private void UnInitScanner() {

        try {

            int ret = mfs100.UnInit();

            if (ret != 0) {

                SetTextOnUIThread(mfs100.GetErrorMsg(ret));

            } else {

                SetLogOnUIThread("Uninit Success");

                SetTextOnUIThread("Uninit Success");

                lastCapFingerData = null;

            }

        } catch (Exception e) {

            Log.e("UnInitScanner.EX", e.toString());

        }

    }



    private void WriteFile(String filename, byte[] bytes) {

        try {

            String path = Environment.getExternalStorageDirectory()

                    + "//FingerData";

            File file = new File(path);

            if (!file.exists()) {

                file.mkdirs();

            }

            path = path + "//" + filename;

            file = new File(path);

            if (!file.exists()) {

                file.createNewFile();

            }

            FileOutputStream stream = new FileOutputStream(path);

            stream.write(bytes);

            stream.close();

        } catch (Exception e1) {

            e1.printStackTrace();

        }

    }



    private void ClearLog() {

        txtEventLog.post(new Runnable() {

            public void run() {

                txtEventLog.setText("", BufferType.EDITABLE);

            }

        });

    }



    private void SetTextOnUIThread(final String str) {



        lblMessage.post(new Runnable() {

            public void run() {

                lblMessage.setText(str);

            }

        });

    }



    private void SetLogOnUIThread(final String str) {



        txtEventLog.post(new Runnable() {

            public void run() {

                txtEventLog.append("\n" + str);

            }

        });

    }



    public void SetData2(FingerData fingerData) {

        if (scannerAction.equals(ScannerAction.Capture)) {

            Enroll_Template = new byte[fingerData.ISOTemplate().length];

            System.arraycopy(fingerData.ISOTemplate(), 0, Enroll_Template, 0,

                    fingerData.ISOTemplate().length);

        } else if (scannerAction.equals(ScannerAction.Verify)) {

            Verify_Template = new byte[fingerData.ISOTemplate().length];

            System.arraycopy(fingerData.ISOTemplate(), 0, Verify_Template, 0,

                    fingerData.ISOTemplate().length);

            int ret = mfs100.MatchISO(Enroll_Template, Verify_Template);

            if (ret < 0) {

                SetTextOnUIThread("Error: " + ret + "(" + mfs100.GetErrorMsg(ret) + ")");

            } else {

                if (ret >= 1400) {

                    SetTextOnUIThread("Finger matched with score: " + ret);

                } else {

                    SetTextOnUIThread("Finger not matched, score: " + ret);

                }

            }

        }



        WriteFile("Raw.raw", fingerData.RawData());

        WriteFile("Bitmap.bmp", fingerData.FingerImage());

        WriteFile("ISOTemplate.iso", fingerData.ISOTemplate());

    }



    @Override

    public void OnDeviceAttached(int vid, int pid, boolean hasPermission) {

        int ret;

        if (!hasPermission) {

            SetTextOnUIThread("Permission denied");

            return;

        }

        if (vid == 1204 || vid == 11279) {

            if (pid == 34323) {

                ret = mfs100.LoadFirmware();

                if (ret != 0) {

                    SetTextOnUIThread(mfs100.GetErrorMsg(ret));

                } else {

                    SetTextOnUIThread("Load firmware success");

                }

            } else if (pid == 4101) {

                String key = "Without Key";

                ret = mfs100.Init();

                if (ret == 0) {

                    showSuccessLog(key);

                } else {

                    SetTextOnUIThread(mfs100.GetErrorMsg(ret));

                }



            }

        }

    }



    private void showSuccessLog(String key) {

        SetTextOnUIThread("Init success");

        String info = "\nKey: " + key + "\nSerial: "

                + mfs100.GetDeviceInfo().SerialNo() + " Make: "

                + mfs100.GetDeviceInfo().Make() + " Model: "

                + mfs100.GetDeviceInfo().Model()

                + "\nCertificate: " + mfs100.GetCertification();

        SetLogOnUIThread(info);

    }



    @Override

    public void OnDeviceDetached() {

        UnInitScanner();

        SetTextOnUIThread("Device removed");

    }



    @Override

    public void OnHostCheckFailed(String err) {

        try {

            SetLogOnUIThread(err);

            Toast.makeText(this, err, Toast.LENGTH_LONG).show();

        } catch (Exception ignored) {

        }

    }



}
activity_mfs100_sample.xml
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical"

    tools:context=".MFS100Test" >



    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:gravity="top"

        android:orientation="vertical"

        android:paddingTop="0dp" >



        <TextView

            android:id="@+id/lblTitle"

            style="@style/title"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:background="@drawable/title"

            android:gravity="center"

            android:padding="5dp"

            android:text="@string/app_title"

            android:textSize="20sp"

            android:textStyle="bold"

            android:visibility="gone"/>

    </LinearLayout>



    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:gravity="top"

        android:orientation="vertical"

        android:paddingTop="5dp" >



        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:layout_marginLeft="5dp"

            android:layout_marginRight="5dp"

            android:orientation="horizontal"

            android:paddingLeft="10dp"

            android:paddingRight="10dp" >



            <ImageView

                android:id="@+id/imgFinger"

                android:layout_width="100dp"

                android:layout_height="120dp"

                android:background="@drawable/imagefinger"

                android:contentDescription="@string/app_name"

                android:scaleType="fitXY"

                android:src="@drawable/finger" />



            <LinearLayout

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:orientation="vertical"

                android:paddingLeft="5dp" >



                <LinearLayout

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content"

                    android:orientation="horizontal" >



                    <Button

                        android:id="@+id/btnInit"

                        style="@style/buttonbig2"

                        android:background="@drawable/button"

                        android:onClick="onControlClicked"

                        android:text="@string/Init" />



                    <Button

                        android:id="@+id/btnUninit"

                        style="@style/buttonbig2"

                        android:background="@drawable/button"

                        android:onClick="onControlClicked"

                        android:text="@string/UnInit" />

                </LinearLayout>



                <LinearLayout

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content"

                    android:orientation="horizontal" >



                    <Button

                        android:id="@+id/btnSyncCapture"

                        style="@style/buttonbig2"

                        android:background="@drawable/button"

                        android:onClick="onControlClicked"

                        android:text="@string/SyncCapture" />



                    <Button

                        android:id="@+id/btnStopCapture"

                        style="@style/buttonbig2"

                        android:background="@drawable/button"

                        android:onClick="onControlClicked"

                        android:text="@string/StopSyncCapture" />

                </LinearLayout>



                <CheckBox

                    android:id="@+id/cbFastDetection"

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content"

                    android:paddingLeft="5dp"

                    android:text="Fast Finger Detection"

                    android:textColor="@android:color/black"

                    android:textSize="15sp"

                    android:textStyle="bold" />

            </LinearLayout>

        </LinearLayout>



        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:layout_marginLeft="5dp"

            android:layout_marginRight="5dp"

            android:layout_marginTop="1dp"

            android:orientation="horizontal"

            android:paddingLeft="10dp"

            android:paddingRight="10dp" >



            <Button

                android:id="@+id/btnMatchISOTemplate"

                style="@style/buttonbig2"

                android:background="@drawable/button"

                android:onClick="onControlClicked"

                android:text="@string/MatchISO" />



            <Button

                android:id="@+id/btnExtractISOImage"

                style="@style/buttonbig2"

                android:background="@drawable/button"

                android:onClick="onControlClicked"

                android:text="EXTRACT ISO" />

        </LinearLayout>



        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:layout_marginLeft="5dp"

            android:layout_marginRight="5dp"

            android:layout_marginTop="1dp"

            android:orientation="horizontal"

            android:paddingLeft="10dp"

            android:paddingRight="10dp" >



            <Button

                android:id="@+id/btnExtractAnsi"

                style="@style/buttonbig2"

                android:background="@drawable/button"

                android:onClick="onControlClicked"

                android:text="EXTRACT ANSI" />



            <Button

                android:id="@+id/btnExtractWSQImage"

                style="@style/buttonbig2"

                android:background="@drawable/button"

                android:onClick="onControlClicked"

                android:text="EXTRACT WSQ" />

        </LinearLayout>



    </LinearLayout>



    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:gravity="top"

        android:orientation="vertical"

        android:paddingBottom="3dp"

        android:paddingTop="5dp" >



        <TextView

            android:id="@+id/lblMessage"

            style="@style/message"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:background="@drawable/message"

            android:gravity="center"

            android:padding="5dp"

            android:text=""

            android:textSize="15dp"

            android:textStyle="bold" />



        <EditText

            android:id="@+id/txtEventLog"

            style="@style/message"

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:layout_weight="0.70"

            android:background="@drawable/message"

            android:gravity="top|left"

            android:inputType="textMultiLine"

            android:padding="5dp"

            android:text=""

            android:textSize="14dp" />



        <Button

            android:id="@+id/btnClearLog"

            style="@style/buttonfull"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:background="@drawable/button"

            android:onClick="onControlClicked"

            android:text="@string/ClearLog" />

    </LinearLayout>



</LinearLayout>

 

9 comments:

  1. sir i used your code but my mantra device not respond when app is running.

    ReplyDelete
  2. sir how can we send and retrieve this finger data to server and retrieve to match from server.

    ReplyDelete
  3. sir i have also same issue , when i used your code but my mantra device not respond when app is running.

    ReplyDelete
  4. Somewhere the content of the blog surrounded by little arguments. Yes it is healthy for readers. They can include this kind of language in their writing skill as well as while group discussion in college.
    biometric door lock

    ReplyDelete
    Replies
    1. Yes you can use it as door lock. But there is more affordable and useful devices for that kind of scenario. So you can try different device for that kind of use. Now a days their is more type of affordable IoT devices in market for this kind of scenario.

      Delete
  5. i want call intent for aeps service .how can i proceed?

    ReplyDelete
  6. can we get pid block using mantra service

    ReplyDelete
  7. its showing invalid key, can you post the complete source code

    ReplyDelete
  8. This comment has been removed by the author.

    ReplyDelete