B4A Library SPass - Samsung Fingerprint SDK

Discussion in 'Additional libraries, classes and official updates' started by barx, Jun 21, 2015.

  1. barx

    barx Well-Known Member Licensed User

    I have wrapped the Samsung Fingerprint SDK library. This allows you to use the fingerprint sensor built into the Samsung Galaxy S5 and S6 (and no doubt more to come). I have tested on the S6; I don't have an S5 but I believe it will work the same...

    Documentation

    SPass
    Author:
    BarxDroid
    Version: 1.10
    • SPass

      Permissions:
      • com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY

      Events:
      • Completed ()
        Called when the request of identify is completed after finger is detached on the sensor.
      • Finished (StatusCode As Int, Message As String)
        Called once the Identy operation has finished
      • Ready ()
        Called once the device is ready to detect a fingerprint
      • Registered ()
        Called when a new fingerprint has been registered
      • Started ()
        Called when the user touches the fingerprint sensor during an Identify operation

      Fields:
      • STATUS_AUTHENTICATION_FAILED As Int
      • STATUS_AUTHENTICATION_PASSWORD_SUCCESS As Int
      • STATUS_AUTHENTICATION_SUCCESS As Int
      • STATUS_BUTTON_PRESSED As Int
      • STATUS_OPERATION_DENIED As Int
      • STATUS_QUALITY_FAILED As Int
      • STATUS_SENSOR_FAILED As Int
      • STATUS_TIMEOUT_FAILED As Int
      • STATUS_USER_CANCELLED As Int
      • STATUS_USER_CANCELLED_BY_TOUCH_OUTSIDE As Int

      Methods:
      • CancelIdentify
        Cancels an existing identification operation
      • HasRegisteredFinger As Boolean
        Checks whether there are any registered fingerprints on the device
      • Initialize (Eventname As String)
        Initializes the object.
        Eventname - the eventname used to call events.
      • RegisterFinger
        Registers a fingerpring on the device through the Enroll screen of the Setting menu.
      • StartIdentify (Dialog As Boolean, EnablePassword As Boolean)
        Requests an Identification Operation to recognize a fingerprint.
        Dialog - Sets whether a dialog should be shown
      • SupportsSpass As Boolean
        Returns whether a compatible fingerprint device is detected
      • setDialogTitle (Title As String, Color As Int)
        Adds a title in the user interface before requesting fingerprint recognition
      • DialogButton (Text As String)
        Changes the purpose of the UI Password button, so you can use it yourself.
        Use this method to set the text of the button.

        Will return STATUS_BUTTON_PRESSED in the _Finished Event
      • ChangeStandbyString (Text As String)
        Changes the Standby String in the interface

      Properties:
      • CanceledOnTouchOutside As Boolean [write only]
        Determines whether the UI is dismissed or not when touching background elements
      • DialogBgTransparency As Int [write only]
        Sets the transparency og the background elements before requesting fingerprint recognition
      • DialogIcon As String [write only]
        Adds an Icon in the bottom left portion of the UI before requesting fingerprint recognition
        Icon - a String representing a file stored in /res/drawable/...
        Note: No extension is needed and the file must be read only
      • IdentifiedFingerprintIndex As Int [read only]
        Gets the fingerprint index of the identified fingerprint
      • IntendedFingerprintIndex() As Integer [write only]
        Specifies a fingerprint index for identification before requesting fingerprint recognition
      • RegisteredFingerprints As Map [read only]
        Obtain a list of registered fingerprint indexes and names in the settings menu
      • Is PasswordEnabled As Boolean [read only]
        Checks if the device supports backup password
      • GetGuideForPoorQuality As String [read only]
        Obtains the string of guide when recognition is failed due to the poor quality.
        NOTE: The _Finished event must have returned 'STATUS_QUALITY_FAILED'

    Change log
    V1.0
    Initial Release

    V1.10
    - Added Completed() Event
    - Added STATUS_BUTTON_PRESSED Field
    - Added STATUS_OPERATION_DENIED Field
    - Added DialogButton Method
    - Added ChangeStandbyString Method
    - Added GetGuideForPoorQuality
    - Added IsPasswrdEnabled Property

    Installation
    There are a couple of steps here as it is a wrapper for the existing SDK. I have no idea if the sdk files can be packaged within the wrapper .jar. Maybe someone can let me know if they can.
    Step 1: Download the attached SPass.zip, extract the files into your Additional Libraries folder.
    Step 2: Download the SDK files from Here (V1.1.3 at time of writing) and extract the lib files ('sdk-vx.x.x.jar' and 'pass-vx.x.x.jar' to you additional libraries folder.
    Step 3: Rename the files as follows
    sdk-vx.x.x.jar -> spass-sdk.jar
    pass-vx.x.x.jar -> spass-lib.jar
    Done, use it now like any other lib....

    Files

    Spass.apk - Example app showing a basic usage.
    SPass.Zip - The Wrapper library files.
    SPass Project.zip - The sample project that creates the Spass.apk sample

    Hope this library is of use to some people.....
     

    Attached Files:

    Last edited: Jun 4, 2016
  2. barx

    barx Well-Known Member Licensed User

    Here is a short video of the sample app for those that cannot utilise the features

    NOTE: The app theme was changed to Material for the video because it looks nicer ;)

    CLICK HERE
     
  3. DonManfred

    DonManfred Expert Licensed User

    Today i will get my new device, a S6 Edge :)

    I´m sure i will test your library soon :D

    Thank you for sharing!
     
    ArminKH and Erel like this.
  4. DonManfred

    DonManfred Expert Licensed User

    Done and works as Expected. Great

    Again Thanx, @barx
     
    barx likes this.
  5. Indy

    Indy Member Licensed User

    Hi,

    Just wanted to say the test apk works on my Samsung Tab S2 9.7" WiFi edition. Results were exactly same as video. Also, I noticed that Samsung have released version 1.1.4 of the SDK. Any plans to update the library to use that?

    Thanks
     
    dar2o3 likes this.
  6. barx

    barx Well-Known Member Licensed User

    Thanks for reporting back great news. I can certainly look at the new version of the SDK. ;)
     
  7. barx

    barx Well-Known Member Licensed User

    Looking at changelog for 1.1.4, it is just stability enhancements, there are no changes to the methods / functions in the sdk so simply downloading 1.1.4 instead of 1.1.3 should work fine. don't forget to rename the files as stated in the original post (it is this situation why I added this step) ;)
     
    DonManfred likes this.
  8. Hector S. Dominguez

    Hector S. Dominguez New Member Licensed User

    Hi, thanks for the great work that you had done here, I just downloaded the library but I realize that the pass sdk is now 1.2.1, and I'm having problems with the app, it crash when the fingerprint is scanned, this is the log using your sample

    Code:
    ** Activity (main) Create, isFirst = true **
    Fingerprint Supported
    ** 
    Activity (main) Resume **
    ** 
    Activity (main) Pause, UserClosed = false **
    ** 
    Activity (main) Create, isFirst = false **
    Fingerprint Supported
    ** 
    Activity (main) Resume **
    Ready
    Started
    java.lang.AbstractMethodError: abstract method 
    "void com.samsung.android.sdk.pass.SpassFingerprint$IdentifyListener.onCompleted()"
        at com.samsung.android.sdk.pass.SpassFingerprint$b.onFingerprintEvent(Unknown Source)
        at com.samsung.android.fingerprint.IFingerprintClient$Stub.onTransact(IFingerprintClient.java:
    59)
        at android.os.Binder.execTransact(Binder.java:
    446)
    ** 
    Activity (main) Pause, UserClosed = true **
    Connected 
    to B4A-Bridge (Wifi)
    sending message 
    to waiting queue (CallSubDelayed - UpdateStatus)
     
  9. barx

    barx Well-Known Member Licensed User

    Hi I have downloaded the latest and will hopefully get time to look at it later today or in the morning.

    Cheers
     
    DonManfred likes this.
  10. barx

    barx Well-Known Member Licensed User

    If you download the V1.1 file from the first post, all should be fixed.

    Cheers
     
    DonManfred likes this.
  11. Hector S. Dominguez

    Hector S. Dominguez New Member Licensed User

    Thanks a lot for your support, it works pretty well
     
    barx likes this.
  12. mr23

    mr23 Active Member Licensed User

    Just tried this. Getting a byte code conversion problem?
    Suggestion?
    Just downloaded the materials.

    Thanks,
    -Chris

    Code:
    B4A version: 5.50
    Parsing code.    (
    0.00s)
    Compiling code.    (
    0.02s)
    Compiling layouts code.    (
    0.00s)
    Generating R 
    file.    (0.06s)
    Compiling generated Java code.    (
    0.87s)
    Convert byte code - optimized dex.    Error
    warning: Ignoring InnerClasses attribute 
    for an anonymous inner class
    (com.samsung.android.sdk.pass.a) that doesn
    't come with an
    associated EnclosingMethod attribute. This class was probably produced by a
    compiler that did 
    not target the modern .class file format. The recommended
    solution 
    is to recompile the class from source, using an up-to-date compiler
    and without specifying any "-target" type options. The consequence of ignoring
    this warning 
    is that reflective operations on this class will incorrectly
    indicate that it 
    is *not* an inner class.
    warning: Ignoring InnerClasses attribute 
    for an anonymous inner class
    (com.samsung.android.sdk.pass.c) that doesn
    't come with an
    associated EnclosingMethod attribute. This class was probably produced by a
    compiler that did 
    not target the modern .class file format. The recommended
    solution 
    is to recompile the class from source, using an up-to-date compiler
    and without specifying any "-target" type options. The consequence of ignoring
    this warning 
    is that reflective operations on this class will incorrectly
    indicate that it 
    is *not* an inner class.
    warning: Ignoring InnerClasses attribute 
    for an anonymous inner class
    (com.samsung.android.sdk.pass.e) that doesn
    't come with an
    associated EnclosingMethod attribute. This class was probably produced by a
    compiler that did 
    not target the modern .class file format. The recommended
    solution 
    is to recompile the class from source, using an up-to-date compiler
    and without specifying any "-target" type options. The consequence of ignoring
    this warning 
    is that reflective operations on this class will incorrectly
    indicate that it 
    is *not* an inner class.
    warning: Ignoring InnerClasses attribute 
    for an anonymous inner class
    (com.samsung.android.sdk.pass.b) that doesn
    't come with an
    associated EnclosingMethod attribute. This class was probably produced by a
    compiler that did 
    not target the modern .class file format. The recommended
    solution 
    is to recompile the class from source, using an up-to-date compiler
    and without specifying any "-target" type options. The consequence of ignoring
    this warning 
    is that reflective operations on this class will incorrectly
    indicate that it 
    is *not* an inner class.
    warning: Ignoring InnerClasses attribute 
    for an anonymous inner class
    (com.samsung.android.sdk.pass.d) that doesn
    't come with an
    associated EnclosingMethod attribute. This class was probably produced by a
    compiler that did 
    not target the modern .class file format. The recommended
    solution 
    is to recompile the class from source, using an up-to-date compiler
    and without specifying any "-target" type options. The consequence of ignoring
    this warning 
    is that reflective operations on this class will incorrectly
    indicate that it 
    is *not* an inner class.
    warning: Ignoring InnerClasses attribute 
    for an anonymous inner class
    (com.samsung.android.sdk.pass.a) that doesn
    't come with an
    associated EnclosingMethod attribute. This class was probably produced by a
    compiler that did 
    not target the modern .class file format. The recommended
    solution 
    is to recompile the class from source, using an up-to-date compiler
    and without specifying any "-target" type options. The consequence of ignoring
    this warning 
    is that reflective operations on this class will incorrectly
    indicate that it 
    is *not* an inner class.
    warning: Ignoring InnerClasses attribute 
    for an anonymous inner class
    (com.samsung.android.sdk.pass.b) that doesn
    't come with an
    associated EnclosingMethod attribute. This class was probably produced by a
    compiler that did 
    not target the modern .class file format. The recommended
    solution 
    is to recompile the class from source, using an up-to-date compiler
    and without specifying any "-target" type options. The consequence of ignoring
    this warning 
    is that reflective operations on this class will incorrectly
    indicate that it 
    is *not* an inner class.
    warning: Ignoring InnerClasses attribute 
    for an anonymous inner class
    (com.samsung.android.sdk.pass.c) that doesn
    't come with an
    associated EnclosingMethod attribute. This class was probably produced by a
    compiler that did 
    not target the modern .class file format. The recommended
    solution 
    is to recompile the class from source, using an up-to-date compiler
    and without specifying any "-target" type options. The consequence of ignoring
    this warning 
    is that reflective operations on this class will incorrectly
    indicate that it 
    is *not* an inner class.
    warning: Ignoring InnerClasses attribute 
    for an anonymous inner class
    (com.samsung.android.sdk.pass.d) that doesn
    't come with an
    associated EnclosingMethod attribute. This class was probably produced by a
    compiler that did 
    not target the modern .class file format. The recommended
    solution 
    is to recompile the class from source, using an up-to-date compiler
    and without specifying any "-target" type options. The consequence of ignoring
    this warning 
    is that reflective operations on this class will incorrectly
    indicate that it 
    is *not* an inner class.
    warning: Ignoring InnerClasses attribute 
    for an anonymous inner class
    (com.samsung.android.sdk.pass.e) that doesn
    't come with an
    associated EnclosingMethod attribute. This class was probably produced by a
    compiler that did 
    not target the modern .class file format. The recommended
    solution 
    is to recompile the class from source, using an up-to-date compiler
    and without specifying any "-target" type options. The consequence of ignoring
    this warning 
    is that reflective operations on this class will incorrectly
    indicate that it 
    is *not* an inner class.
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/samsung/android/sdk/pass/Spass;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/samsung/android/sdk/pass/a;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/samsung/android/sdk/pass/b;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/samsung/android/sdk/pass/SpassFingerprint$a;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/samsung/android/sdk/pass/c;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/samsung/android/sdk/pass/SpassFingerprint$b;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/samsung/android/sdk/pass/d;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/samsung/android/sdk/pass/e;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/samsung/android/sdk/pass/SpassFingerprint$c;
    UNEXPECTED TOP-LEVEL 
    EXCEPTION:
    java.lang.RuntimeException: Translation has been interrupted
        at com.android.dx.command.dexer.Main.processAllFiles(Main.java:
    608)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:
    311)
        at com.android.dx.command.dexer.Main.run(Main.java:
    277)
        at com.android.dx.command.dexer.Main.main(Main.java:
    245)
        at com.android.dx.command.Main.main(Main.java:
    106)
    Caused by: java.lang.InterruptedException: Too many errors
        at com.android.dx.command.dexer.Main.processAllFiles(Main.java:
    600)
        ... 
    4 more
     
    Last edited: Jul 24, 2016
  13. Octavio Diaz

    Octavio Diaz Member Licensed User

    Hello, the app works fine, but only have the option of 4 fingerprint to match? If I want to put more fingerprints on my device (Samsung) it's posible? someone? Thanks a lot!
     
  14. DonManfred

    DonManfred Expert Licensed User

    Yes.In the Systemsettings for Fingerprint you only can store FOUR Fingerprints.
    Samsung limited it to 4.
     
    Octavio Diaz and barx like this.
  15. Spinter

    Spinter Active Member Licensed User

    even if it does not work well on the mini player s5 your library works well!
    S5 mini OK
     
  16. Spinter

    Spinter Active Member Licensed User

    bugs RegisterFinger
    I tried to use this method with the library but does not work!
     
  17. Suntzu

    Suntzu Member Licensed User

Loading...