Giter VIP home page Giter VIP logo

fingerprintidentify's Introduction

FingerprintIdentify

This is an expandable Android fingerprint api compatible lib, which also combine these api:

Android API:minimum support for Android 6.0 (more detail)

SamSung SDK:minimum support for Android 4.2 (more detail)

MeiZu SDK:minimum support for Android 5.1 (more detail)

Api priority level:Android > Samsung > MeiZu

中文版介绍 -- 传送门

1. Gradle

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}
dependencies {
	implementation 'com.github.uccmawei:FingerprintIdentify:1.2.6'
}

2. AndroidManifest

<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
<uses-permission android:name="com.fingerprints.service.ACCESS_FINGERPRINT_MANAGER"/>
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY"/>

3. FingerprintIdentify api

mFingerprintIdentify = new FingerprintIdentify(this);       // create object
mFingerprintIdentify.setSupportAndroidL(true);              // support android L
mFingerprintIdentify.setExceptionListener(listener);        // exception callback for develop
mFingerprintIdentify.init();                                // init

mFingerprintIdentify.isFingerprintEnable();                 // is fingerprint usable
mFingerprintIdentify.isHardwareEnable();                    // is hardware usable
mFingerprintIdentify.isRegisteredFingerprint();             // is fingerprint collected
mFingerprintIdentify.startIdentify(maxTimes, listener);     // start identify
mFingerprintIdentify.cancelIdentify();                      // cancel identify
mFingerprintIdentify.resumeIdentify();                      // resume identify

4. startIdentify method

mFingerprintIdentify.startIdentify(3, new BaseFingerprint.IdentifyListener() {
    @Override
    public void onSucceed() {
        // succeed, release hardware automatically
    }

    @Override
    public void onNotMatch(int availableTimes) {
        // not match, try again automatically
    }

    @Override
    public void onFailed(boolean isDeviceLocked) {
        // failed, release hardware automatically
        // isDeviceLocked: is device locked temporarily
    }

    @Override
    public void onStartFailedByDeviceLocked() {
        // the first start failed because the device was locked temporarily
    }
});

5. Proguard

-ignorewarnings

# MeiZuFingerprint
-keep class com.fingerprints.service.** { *; }

# SmsungFingerprint
-keep class com.samsung.android.sdk.** { *; }

6. Notice

1. Usually, device will be locked temporarily when read incorrect fingerprints continuously 5 times.
   And it need to takes about 30 seconds to get back to normal.
   But it's not standardized, MeiZu SDK has no limit to this.

2. About 'com.android.support:appcompat-v7:25.3.1' version
   The class FingerprintManagerCompatApi23 will check the feature FEATURE_FINGERPRINT from version 25.
   More info:https://code.google.com/p/android/issues/detail?id=231939

3. Some manufacturers will transplant standard fingerprint API to the device
   which version less than Android M, such as OPPO.
   But the API will be modified sometimes and cause calling crash, such as VIVO.

4. We need to check the manufacturers because Meizu's sdk is available on some other devices.

5. MeiZu's SDK runs abnormally on MeiLan Note3 sometimes, it can't switch to mback mode event called release。

7. Version Update

v1.2.6 2018.12.11 Support AndroidX android.enableJetifier=true.

v1.2.5 2018.11.20 minSdkVersion 21 -> 14.

v1.2.4 2018.11.16 cancelIdentify will not call onFailed.

v1.2.3 2018.11.15 Migrate to AndroidX. Support Android L. Support custom identify implementation.

v1.2.1 2017.07.25 Add new callback onStartFailedByDeviceLocked.

v1.2.0 2017.07.10 Add android M limit. Add new callback parameter to notice is that device locked temporarily。

v1.1.5 2017.06.14 FingerprintIdentify(Activity) --> FingerprintIdentify(Context).

v1.1.4 2017.05.24 Remove android M limit, add MeiZu manufacturer verify. See ISSUE#12

v1.1.3 2017.05.22 Update the method getFingerprintManager. See ISSUE#11

v1.1.2 2017.04.25 Modify AOSP's code,avoid the PackageManager.FEATURE_FINGERPRINT limit.

v1.1.1 2017.03.20 Modify gradle AppCompat lib version.

v1.1.0 2017.03.16 Modify package name and bug fixed.

v1.0.2 2017.02.17 Add exception callback.

v1.0.1 2017.02.15 Bug fixed.

v1.0.0 2017.02.10 Release v1.

License

Licensed under the MIT License, see the LICENSE for copying permission.

fingerprintidentify's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fingerprintidentify's Issues

在Application里面调用的问题,求教。

我要做指纹蒙层逻辑,在Application里面回调ActivityLifecycleCallbacks方法判断前后台,假如用户中途删除了指纹,那我就不让用户进入指纹验证页面,现在用
FingerprintIdentify fingerprintIdentify = new FingerprintIdentify(activity); 需传入activity对象
不然调用不了fingerprintIdentify.isRegisteredFingerprint()方法,那我怎么在Application里面传入activity对象?不知道我写的是否明白。

FingerprintIdentify使用问题

作者你好,在使用该库时有俩个疑问
1.FingerprintIdentify实例是必须要在Application中创建吗?当我将FingerprintIdentify在Activity中使用时,判断isHardwareEnable为false,但实际上手机是支持指纹识别的;

2.当App检测到手机未录入指纹时,调起设置添加指纹,然后返回再次进行检测依然显示未录入,只有将app杀掉才可检测,怎么做到从设置返回直接检测到指纹录入状态呢?以下是我的代码,望指导 谢谢🙏

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fingerprint_dialog_content);
    btn_stop = (Button) findViewById(R.id.btn_stop);
    btn_start = (Button) findViewById(R.id.btn_start);
    btn_reset = (Button) findViewById(R.id.btn_reset);
    btn_switch = (Switch) findViewById(R.id.btn_switch);

    btn_stop.setOnClickListener(this);
    btn_start.setOnClickListener(this);
    btn_reset.setOnClickListener(this);
    btn_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                SharedPreferencesUtil.put(MainActivity.this, "isOpen", true);

            } else {
                SharedPreferencesUtil.put(MainActivity.this, "isOpen", false);
            }
        }
    });

}

/**
 * 指纹功能支持判断
 */
public boolean isFinger() {
    isOpen = (boolean) SharedPreferencesUtil.get(MainActivity.this, "isOpen", false);
    if (!App.sFingerprintIdentify.isHardwareEnable()) {
        Toast.makeText(MainActivity.this, "当前设备不支持指纹识别功能", Toast.LENGTH_LONG).show();
        startActivity(new Intent(MainActivity.this, SecondActivity.class));
        return false;
    }

    if (!App.sFingerprintIdentify.isRegisteredFingerprint()) {
        Toast.makeText(MainActivity.this, "当前设备未录入指纹,请前往开启", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(Settings.ACTION_SETTINGS);
        startActivity(intent);
        return false;
    }

    if (!isOpen) {
        Toast.makeText(MainActivity.this, "App指纹开关未开启,请开启", Toast.LENGTH_LONG).show();
        return false;
    }

    return true;
}


@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.btn_start:
            boolean finger = isFinger();
            if (finger) {
                App.sFingerprintIdentify.startIdentify(3, new BaseFingerprint.FingerprintIdentifyListener() {
                    @Override
                    public void onSucceed() {
                        Log.d(TAG, "onSucceed");
                        Toast.makeText(MainActivity.this, "onSuccess", Toast.LENGTH_LONG).show();
                    }

                    @Override
                    public void onNotMatch(int availableTimes) {
                        Log.d(TAG, "onNotMatch");
                        Toast.makeText(MainActivity.this, "onNotMatch" + "还有" + availableTimes + "次机会", Toast.LENGTH_LONG).show();
                    }

                    @Override
                    public void onFailed() {
                        Log.d(TAG, "onFailed");
                        Toast.makeText(MainActivity.this, "onFailed", Toast.LENGTH_LONG).show();
                    }
                });
            }

    }

}

@Override
protected void onPause() {
    super.onPause();
    Log.d(TAG, "onPause");
    App.sFingerprintIdentify.cancelIdentify();

}

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.d(TAG, "onDestroy");
    App.sFingerprintIdentify.cancelIdentify();

}

内存泄漏问题

我用leakcanary检测,在登录的时候,用指纹解锁,登录成功,关闭页面,但是在AuthenticationCallback存在泄漏,用的是getApplication(),做创建对象
wechatimg65

锁屏会调用onFailed

三星S8手机,当我调用startIdentify正在等待验证指纹的时候,关闭屏幕黑屏,会触发onFailed方法。(因为我的onFailed方法实现了弹窗提示验证失败,所以导致这种情景下误触发弹窗)

关于onFailed()回调问题

作者,你好,请问下onFailed()在什么情况下进行回调,我写一个dialog,然后点击取消按钮,会回调onFailed()方法,是我代码问题还是sdk使用方式不对,以下是我的代码,谢谢🙏

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn_stop = (Button) findViewById(R.id.btn_stop);
    btn_start = (Button) findViewById(R.id.btn_start);
    btn_reset = (Button) findViewById(R.id.btn_reset);
    btn_switch = (Switch) findViewById(R.id.btn_switch);

    btn_stop.setOnClickListener(this);
    btn_start.setOnClickListener(this);
    btn_reset.setOnClickListener(this);


    btn_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                SharedPreferencesUtil.put(MainActivity.this, "isOpen", true);

            } else {
                SharedPreferencesUtil.put(MainActivity.this, "isOpen", false);
            }
        }
    });

}

/**
 * 指纹功能支持判断
 */
public boolean isFinger() {
    sFingerprintIdentify = new FingerprintIdentify(this);
    String deviceModel = android.os.Build.MODEL;

    isOpen = (boolean) SharedPreferencesUtil.get(MainActivity.this, "isOpen", false);

    if (deviceModel.equals("vivo Xplay5A")) {
        Toast.makeText(MainActivity.this, "当前设备不支持指纹识别功能", Toast.LENGTH_LONG).show();
        return false;
    }
    if (!sFingerprintIdentify.isHardwareEnable()) {
        Toast.makeText(MainActivity.this, "当前设备不支持指纹识别功能", Toast.LENGTH_LONG).show();
        startActivity(new Intent(MainActivity.this, SecondActivity.class));
        return false;
    }

    if (!sFingerprintIdentify.isRegisteredFingerprint()) {
        Toast.makeText(MainActivity.this, "当前设备未录入指纹,请前往开启", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(Settings.ACTION_SETTINGS);
        startActivity(intent);
        return false;
    }

    if (!isOpen) {
        Toast.makeText(MainActivity.this, "App指纹开关未开启,请开启", Toast.LENGTH_LONG).show();
        return false;
    }

    return true;
}


@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.btn_start:
            Log.d(TAG, "start");
            boolean finger = isFinger();
            if (finger) {
                View finger_view = View.inflate(this,R.layout.finger_succeed_view,  null);
                final TextView tv_fingerprint_status = (TextView) finger_view.findViewById(R.id.fingerprint_status);
                final ImageView iv_fingerprint_icon = (ImageView) finger_view.findViewById(R.id.fingerprint_icon);
                final AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setView(finger_view);
                builder.setCancelable(true);
                builder.setPositiveButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });

                final AlertDialog dialog = builder.create();
                dialog.show();
                sFingerprintIdentify.startIdentify(3, new BaseFingerprint.FingerprintIdentifyListener() {
                    @Override
                    public void onSucceed() {
                        Log.d(TAG, "onSucceed");
                        tv_fingerprint_status.setText("指纹识别成功");
                        tv_fingerprint_status.setTextColor(getResources().getColor(R.color.success_color));
                        iv_fingerprint_icon.setImageResource(R.drawable.ic_fingerprint_success);
                    }

                    @Override
                    public void onNotMatch(int availableTimes) {
                        Log.d(TAG, "onNotMatch");
                        tv_fingerprint_status.setText("验证失败" + "还有" + availableTimes + "次机会");
                        tv_fingerprint_status.setTextColor(getResources().getColor(R.color.warning_color));


                        iv_fingerprint_icon.setImageResource(R.drawable.ic_fingerprint_error);


                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                tv_fingerprint_status.setText("指纹识别");
                                iv_fingerprint_icon.setImageResource(R.drawable.ic_fp_40px);
                                tv_fingerprint_status.setTextColor(getResources().getColor(R.color.hint_color));
                            }
                        }, 1000);
                    }

                    @Override
                    public void onFailed() {
                        Log.d(TAG, "onFailed");
                        tv_fingerprint_status.setText("尝试多次失败,已退出登陆");
                        tv_fingerprint_status.setTextColor(getResources().getColor(R.color.warning_color));
                        iv_fingerprint_icon.setImageResource(R.drawable.ic_fingerprint_error);

                    }
                });
            }
    }

}

@Override
protected void onPause() {
    super.onPause();
    Log.d(TAG, "onPause");
    sFingerprintIdentify.cancelIdentify();

}

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.d(TAG, "onDestroy");
    sFingerprintIdentify.cancelIdentify();

}

}

`

resumeIdentify

什么情况下 resumeIdentify 才能起作用 ;当在验证的过程中 切换到home;onpause已经执行了cancelIdentify 然后app从后台切换回来之后 onstart中 去执行resumeIdentify 并不能继续验证指纹

混淆出现问题

混淆后 出现三星的一些类找不到的问题 打包不成功 按照demo中的proguard添加的混淆规则

HTC U11 Plus Support

Library doesn't work with HTC U11s Scanner. OnFailed is called as soon as the startIdentify is called.

Details:

  • HTC U11 plus
  • Android 8.0.0

能不能开放自实现BaseFingerprint

目前FingerprintIdentify中只有AndroidFingerprint、SamsungFingerprint和MeiZuFingerprint,如果想针对其他硬件厂商做处理,就只能改库的源代码了。目前有台小米 note 3 系统是miui8.5版本(android 5.0.2)的,硬件是有指纹识别的,导致无法使用该库

出现友盟jar冲突

Error:Execution failed for task ':app:transformClassesWithDexForDebug'.

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.android.dx.command.Main with arguments {--dex --num-threads=4 --output E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\transforms\dex\debug\folders\1000\1f\main E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\umeng_social_tool_5be335448360ffaf8763306754a7496261d1128d.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\umeng_social_shareview_a49c44ed73562460e3fa8a47861c5f74982cc9eb.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\stetho-okhttp3-1.3.1_0b96bc8e016f2feda1f795178da73782b0cf170b.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\MeiZu_Fingerprint_3070da0e5ac0dd0368c3f84076fecd8575d458de.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\disklrucache-4.0.0-RC1_26ca5e352051a95ff8c683fa559e6de85cd9a73e.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\umeng_social_net_432a705179df5ca2bea5593dd82cfe5eef77ea90.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_da80bb76c89d2d433ea07a2fae630c63a24a84f2.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\rxjava-1.2.1_aa891a92fd7005674dbfb16a988b401dae763c6b.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_70900bc66082d99c1c59ed88a18dc62a92fbfc26.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\SocialSDK_Sina_Simplify_db48a773af6c03907c3791b0554f1b5bf6b414c2.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\umeng-common-1.4.0_74639045b54a4292b1ad055f38bde023e09c738a.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_cc8a26361628b8038a43e9f8b9df510a239b1e92.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\eventbus-3.0.0_338198e230e883acd6c9c82ca46ba5fc3096755c.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_46477ee5a180e68276a203ab87b027703b9e0df9.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\alicloud-android-sdk-httpdns-1.0.7_b426fc77c3c2e39432b50216a62d4fb144a82b72.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_f1165cf30d83ed2c05aa90c1df6625b456a93274.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\gifdecoder-4.0.0-RC1_bc8cbf442e75de04489bd68b3052f0cbf50eec96.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\umeng_social_api_7e83247922ca49e2536c1b3643067cbabad91c62.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_59f3b65841d46a001c51674b4f48b40e8e763240.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\debug_e742ede6dfdfdace2aaf58ea95e9045bab6e017c.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\Samsung_Fingerprint_Sdk-v1.0.0_9f6cc1daa2437a8cf9bf9c5961602c6d8cb1b890.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\support-annotations-25.3.1_10ad9c38becafe5b8de337aa424fc6c6b8f0ee01.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\commons-cli-1.2_7ed28277f6d87070a38e23576b9febb034c7338a.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_17b916fa7f6447f117d5cacb23ccffd05a15d324.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\Samsung_Fingerprint_Pass-v1.2.2_a207c12fd85c9e5aedc2c5acac8d571401e93dc0.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_dff7dcac00abc98a1a5106960d4ff3fa3072ab09.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_7ea34e9e57a9577fd52c20deeccb5e447d674465.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\butterknife-annotations-8.6.0_1e9486226db940d9ca5d43c77ccdeae15ca35a19.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_310fda92d82bdd8785efebeb17c30ea08eb2619a.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_9a85009c91376c03561125e83886c2618e947a4c.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_1c913d22233556a8dc485b1145d89950ed204278.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_3a3a567af86800b6acf139a878167c60f4bcfd19.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\annotations-4.0.0-RC1_44aceb4aecd7d94b471ecb80e18bf899f59969ef.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_47f1dd1ca32e22d188515e53bf632e73c2bc570f.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_95fbd5c6b3d051eff295e34fde90a7f51d7461e1.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\glide-4.0.0-RC1_d61a30f1507a851826ed449c558cf6161482c37a.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_44820c6b3a5c093fca521d105e790fa15763bc51.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\SocialSDK_WeChat_Simplify_11971d3d05d74d619aa291bb41af2529734e4e5d.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\okhttp-3.3.1_2ea39afb3973a142a4b831a99bc4e2df1de6a0a5.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\stetho-1.3.1_188774134423d3687d973af0cf97acae42053549.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_36b740f7274a7e8a7687081c889a00f9b0ee8843.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_ffa750c771e5884341d7128a8cb0d8a4450ee171.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_1ca65d7b436137a8ab52e31368da444b779a50e5.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\SocialSDK_QQ_Simplify_a3f7163d6900cc32e4edc4bd3dc1aafec49b1cb5.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_2d10c93e9a29e047f69446887a5fd5594599d4e7.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\org.apache.http.legacy_71829d705d04d6587903b22cb95c204c5395b0b4.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_d7449cfce4519c113eac4961edb9115825e13202.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_73ab5b571e2af0782ff172c2d44bdd8cf0d52879.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\utdid4all-1.1.5.3_proguard_9cb61b32eef535aeb5111b98ffaffd49ca2e3b57.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_61851c2028da25abdf80d3fb56a748e2e5605aa0.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\umeng-push-3.3.5x_d59b9984a8624cc2937b693e1f8ce233ebff5faf.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\fastjson-1.2.40_3776595d83adb076f41c0d62be7e55ee4b8d03d2.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_ef3a683133a760ef14aafbabc61628d9446a206b.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_4a35175d8d90553889a7e6d879db3bf86fe72f88.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_f760d41fd9bb9935f1b3dcddb6a7cb8e50d04f4b.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_fbba2bf23181e9b0c42860a6d9c2727cb435318d.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\classes_e77cb6b59a9ab55641745e9953ef142258d61514.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\jsr305-2.0.1_69d0b6c8ffa05193b3c0ebfa1d1d218ee290f911.jar E:\As_project\PinTuanZhuan_1.0\app\build\intermediates\pre-dexed\debug\okio-1.8.0_06f7f952010e37a20e0067d81e65675288b9e24f.jar}

指纹ID的获取

大神,你好,我想问下,指纹识别成功后,如果根据返回的result如何获得指纹的具体信息呢?比如说指纹的ID,指纹的名字等?

question

我如何设置指纹呢??

直接调用 FingerprintManager

既然新版 FingerprintManagerCompat 在某些设备上不好使,何不直接使用 FingerprintManager 呢?或者说把 FingerprintManagerCompat 直接贴过来再修改下。

项目协议

请问本项目是在什么协议下发布的。

验证的时候, 为什么依次对android, 三星,魅族三种进行 检查是否完善?

AndroidFingerprint androidFingerprint = new AndroidFingerprint(context, exceptionListener);
if (androidFingerprint.isHardwareEnable()) {
mSubFingerprint = androidFingerprint;
if (androidFingerprint.isRegisteredFingerprint()) {
mFingerprint = androidFingerprint;
return;
}
}

    SamsungFingerprint samsungFingerprint = new SamsungFingerprint(context, exceptionListener);
    if (samsungFingerprint.isHardwareEnable()) {
        mSubFingerprint = samsungFingerprint;
        if (samsungFingerprint.isRegisteredFingerprint()) {
            mFingerprint = samsungFingerprint;
            return;
        }
    }

    MeiZuFingerprint meiZuFingerprint = new MeiZuFingerprint(context, exceptionListener);
    if (meiZuFingerprint.isHardwareEnable()) {
        mSubFingerprint = meiZuFingerprint;
        if (meiZuFingerprint.isRegisteredFingerprint()) {
            mFingerprint = meiZuFingerprint;
        }
    }
}

按照提供的混淆方式,混淆的时候报错

//刚刚解决了

Warning:com.samsung.android.sdk.pass.SpassFingerprint$b: can't find superclass or interface com.samsung.android.fingerprint.IFingerprintClient$Stub
Warning:com.samsung.android.sdk.pass.SpassFingerprint$c: can't find superclass or interface com.samsung.android.fingerprint.FingerprintIdentifyDialog$FingerprintListener
Warning:com.samsung.android.sdk.pass.b: can't find superclass or interface com.samsung.android.fingerprint.FingerprintManager$EnrollFinishListener
Warning:com.alipay.android.phone.mrpc.core.AndroidHttpClient: can't find referenced method 'org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(int,android.net.SSLSessionCache)' in library class android.net.SSLCertificateSocketFactory
Warning:com.fingerprints.service.FingerprintManager: can't find referenced class android.os.ServiceManager
Warning:com.samsung.android.sdk.pass.SpassFingerprint: can't find referenced class com.samsung.android.fingerprint.FingerprintIdentifyDialog
Warning:com.samsung.android.sdk.pass.SpassFingerprint: can't find referenced class com.samsung.android.fingerprint.FingerprintIdentifyDialog$FingerprintListener
Warning:com.samsung.android.sdk.pass.SpassFingerprint: can't find referenced class com.samsung.android.fingerprint.FingerprintManager
Warning:com.samsung.android.sdk.pass.SpassFingerprint: can't find referenced class com.samsung.android.fingerprint.FingerprintManager$EnrollFinishListener
Warning:com.samsung.android.sdk.pass.SpassFingerprint: can't find referenced class com.samsung.android.fingerprint.IFingerprintClient
Warning:com.samsung.android.sdk.pass.SpassFingerprint$b: can't find referenced class com.samsung.android.fingerprint.FingerprintEvent
Warning:com.samsung.android.sdk.pass.SpassFingerprint$b: can't find referenced class com.samsung.android.fingerprint.IFingerprintClient
Warning:com.samsung.android.sdk.pass.SpassFingerprint$b: can't find referenced class com.samsung.android.fingerprint.IFingerprintClient$Stub
Warning:com.samsung.android.sdk.pass.SpassFingerprint$b: can't find referenced class com.samsung.android.fingerprint.FingerprintEvent
Warning:com.samsung.android.sdk.pass.SpassFingerprint$b: can't find referenced class com.samsung.android.fingerprint.IFingerprintClient$Stub
Warning:com.samsung.android.sdk.pass.SpassFingerprint$b: can't find referenced class com.samsung.android.fingerprint.FingerprintEvent
Warning:com.samsung.android.sdk.pass.SpassFingerprint$c: can't find referenced class com.samsung.android.fingerprint.FingerprintEvent
Warning:com.samsung.android.sdk.pass.SpassFingerprint$c: can't find referenced class com.samsung.android.fingerprint.FingerprintIdentifyDialog
Warning:com.samsung.android.sdk.pass.SpassFingerprint$c: can't find referenced class com.samsung.android.fingerprint.FingerprintIdentifyDialog$FingerprintListener
Warning:com.samsung.android.sdk.pass.SpassFingerprint$c: can't find referenced class com.samsung.android.fingerprint.FingerprintEvent

刚刚遇到的小问题,关于targetSdkVersion的?

在我的认知中,targetSdkVersion设置>=23,指纹识别才能用;现在我的项目设置的是22,按理说指纹识别是不能用的,但是项目运行在我的7.1的手机上没问题,感觉很疑惑!我的型号是努比亚z17!

(V1.2.0)5.1.1 红米3不支持指纹,小米应该是移植了原生API

您好,我的手机是红米3 5.1.1 在最新的SDK上面,不能使用指纹了。我简单看了一下
是因为设置了在AndroidFingerprint设置了
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return;
}
想请问一下是何原由设置不支持6.0一下了呢? 是因为你说的 某个设备移植原生API实现不一样导致崩溃么?那我是不是 需要加一个 “移植系统API可用产商”列表(6.0以下的白名单),比如小米,6.0以下我就让他可以继续使用?

如何监听系统指纹是否有变化?

指纹提高安全性,我看到支付宝在系统指纹发生改变(增,删)的时候。再次用到指纹时候,需要输入安全密码! 这个设计很好,我查阅了文档 MZ 有一个

public int[] getIds() ;

的方法 可以返回当前 系统指纹数量,三星有一个

mSpassFingerprint.getRegisteredFingerprintName ();

但是三星未能走通,FingerprintManagerCompat 也没有找到类似的方法,希望得到你的指点!谢谢

vivo xplay5,android5.1.1

vivo xplay5,android5.1.1机型支持手机指纹功能,但验证失败后只执行一次onNotMatch()方法,之后不会执行

打签名包时报错broken class file?

Error processing C:\Users\YANG.android\build-cache\e3b830e7253b36cf42254ced1e747744b89b2b0b\output\jars\libs\Samsung_Fingerprint_Pass-v1.2.2.jar:com\samsung\android\sdk\pass\support\SdkSupporter.class: broken class file?
Error processing C:\Users\YANG.android\build-cache\e3b830e7253b36cf42254ced1e747744b89b2b0b\output\jars\libs\Samsung_Fingerprint_Pass-v1.2.2.jar:com\samsung\android\sdk\pass\support\v1\FingerprintManagerProxyFactory$a.class: broken class file?

请问有没有销毁的方法,因为我加LeakCannary后发现内存泄漏了,FingerprintIdentifyListener好像没有被销毁。

In cn.com.njxmxbank.mbank:1.0.0:1.

  • com.csii.core.control.ActionActivity has leaked:

  • GC ROOT android.hardware.fingerprint.FingerprintManager$2.this$0 (anonymous subclass of android.hardware.fingerprint.IFingerprintServiceReceiver$Stub)

  • references android.hardware.fingerprint.FingerprintManager.mAuthenticationCallback

  • references com.wei.android.lib.fingerprintidentify.aosp.FingerprintManagerCompatApi23$1.val$callback (anonymous subclass of android.hardware.fingerprint.FingerprintManager$AuthenticationCallback)

  • references com.wei.android.lib.fingerprintidentify.aosp.FingerprintManagerCompat$Api23FingerprintManagerCompatImpl$1.val$callback (anonymous subclass of com.wei.android.lib.fingerprintidentify.aosp.FingerprintManagerCompatApi23$AuthenticationCallback)

  • references com.wei.android.lib.fingerprintidentify.impl.AndroidFingerprint$1.this$0 (anonymous subclass of com.wei.android.lib.fingerprintidentify.aosp.FingerprintManagerCompat$AuthenticationCallback)

  • references com.wei.android.lib.fingerprintidentify.impl.AndroidFingerprint.mIdentifyListener

  • references com.action.auth.FingerFragment$1.this$0 (anonymous implementation of com.wei.android.lib.fingerprintidentify.base.BaseFingerprint$FingerprintIdentifyListener)

  • references com.action.auth.FingerFragment.baseListFragment

  • references com.csii.core.control.ActionFragment.activity

  • leaks com.csii.core.control.ActionActivity instance

  • Retaining: 48 KB.

  • Reference Key: 1e416c0b-7c2a-4c88-9220-abaf6f689c75

  • Device: Xiaomi Xiaomi MI 5s Plus natrium

  • Android Version: 6.0.1 API: 23 LeakCanary: 1.5.1 1be44b3

  • Durations: watch=5019ms, gc=129ms, heap dump=4992ms, analysis=224596ms

  • Details:

  • Instance of android.hardware.fingerprint.FingerprintManager$2
    | this$0 = android.hardware.fingerprint.FingerprintManager@315829456 (0x12d32cd0)
    | mDescriptor = java.lang.String@1890768432 (0x70b2d630)
    | mObject = -631591152
    | mOwner = android.hardware.fingerprint.FingerprintManager$2@316557120 (0x12de4740)
    | shadow$klass = android.hardware.fingerprint.FingerprintManager$2
    | shadow$monitor = 0

  • Instance of android.hardware.fingerprint.FingerprintManager
    | static MSG_AUTHENTICATION_FAILED = 103
    | static FINGERPRINT_MODE_SLEEP = 1
    | static MSG_ENROLL_RESULT = 100
    | static FINGERPRINT_ERROR_LOCKOUT = 7
    | static FINGERPRINT_MODE_NAV = 2
    | static FINGERPRINT_CMD_FP_DISABLE = 4
    | static FINGERPRINT_CMD_FP_ENABLE = 3
    | static MSG_ERROR = 104
    | static FINGERPRINT_ERROR_HW_UNAVAILABLE = 1
    | static FINGERPRINT_ACQUIRED_TOO_SLOW = 4
    | static MSG_ACQUIRED = 101
    | static FINGERPRINT_ERROR_VENDOR_BASE = 1000
    | static FINGERPRINT_ACQUIRED_TOO_FAST = 5
    | static FINGERPRINT_ACQUIRED_GOOD = 0
    | static FINGERPRINT_ERROR_UNABLE_TO_PROCESS = 2
    | static FINGERPRINT_CMD_SET_DEFAULT_MODE = 2
    | static FINGERPRINT_ACQUIRED_INSUFFICIENT = 2
    | static MSG_REMOVED = 105
    | static FINGERPRINT_ERROR_TIMEOUT = 3
    | static TAG = java.lang.String@1890457960 (0x70ae1968)
    | static FINGERPRINT_CMD_SET_SECURITY_LEVEL = 7
    | static DEBUG = true
    | static FINGERPRINT_MODE_KEY = 3
    | static FINGERPRINT_ACQUIRED_PARTIAL = 1
    | static FINGERPRINT_ACQUIRED_IMAGER_DIRTY = 3
    | static $staticOverhead = byte[272]@1894043681 (0x70e4d021)
    | static FINGERPRINT_ACQUIRED_VENDOR_BASE = 1000
    | static FINGERPRINT_ERROR_NO_SPACE = 4
    | static FINGERPRINT_CMD_STOP_SET_MODE = 6
    | static MSG_AUTHENTICATION_SUCCEEDED = 102
    | static FINGERPRINT_CMD_START_SET_MODE = 5
    | static FINGERPRINT_ERROR_UNABLE_TO_REMOVE = 6
    | static MSG_AUTHENTICATION_FIDO_SUCCESSED = 106
    | static FINGERPRINT_ERROR_CANCELED = 5
    | static FINGERPRINT_CMD_SET_ACTIVE_MODE = 1
    | mAuthenticationCallback = com.wei.android.lib.fingerprintidentify.aosp.FingerprintManagerCompatApi23$1@317180192 (0x12e7c920)
    | mContext = com.csii.ui.Application.NApplication@316640576 (0x12df8d40)
    | mCryptoObject = null
    | mEnrollmentCallback = null
    | mHandler = android.hardware.fingerprint.FingerprintManager$MyHandler@316557632 (0x12de4940)
    | mRemovalCallback = null
    | mRemovalFingerprint = null
    | mService = android.hardware.fingerprint.IFingerprintService$Stub$Proxy@315612768 (0x12cfde60)
    | mServiceReceiver = android.hardware.fingerprint.FingerprintManager$2@316557120 (0x12de4740)
    | mToken = android.os.Binder@316556544 (0x12de4500)
    | shadow$klass = android.hardware.fingerprint.FingerprintManager
    | shadow$monitor = 0

  • Instance of com.wei.android.lib.fingerprintidentify.aosp.FingerprintManagerCompatApi23$1
    | val$callback = com.wei.android.lib.fingerprintidentify.aosp.FingerprintManagerCompat$Api23FingerprintManagerCompatImpl$1@317179664 (0x12e7c710)
    | shadow$klass = com.wei.android.lib.fingerprintidentify.aosp.FingerprintManagerCompatApi23$1
    | shadow$monitor = 0

  • Instance of
    com.wei.android.lib.fingerprintidentify.aosp.FingerprintManagerCompat$Api23FingerprintManagerCompatImpl$1
    | val$callback = com.wei.android.lib.fingerprintidentify.impl.AndroidFingerprint$1@317179616 (0x12e7c6e0)
    | shadow$klass = com.wei.android.lib.fingerprintidentify.aosp.FingerprintManagerCompat$Api23FingerprintManagerCompatImpl$1
    | shadow$monitor = 0

  • Instance of com.wei.android.lib.fingerprintidentify.impl.AndroidFingerprint$1
    | this$0 = com.wei.android.lib.fingerprintidentify.impl.AndroidFingerprint@319728752 (0x130eac70)
    | shadow$klass = com.wei.android.lib.fingerprintidentify.impl.AndroidFingerprint$1
    | shadow$monitor = 0

  • Instance of com.wei.android.lib.fingerprintidentify.impl.AndroidFingerprint
    | mCancellationSignal = android.support.v4.os.CancellationSignal@318178624 (0x12f70540)
    | mFingerprintManagerCompat = com.wei.android.lib.fingerprintidentify.aosp.FingerprintManagerCompat@317179568 (0x12e7c6b0)
    | mContext = com.csii.ui.Application.NApplication@316640576 (0x12df8d40)
    | mExceptionListener = null
    | mHandler = android.os.Handler@318178592 (0x12f70520)
    | mIdentifyListener = com.action.auth.FingerFragment$1@317178944 (0x12e7c440)
    | mIsCalledStartIdentify = true
    | mIsCanceledIdentify = true
    | mIsHardwareEnable = true
    | mIsRegisteredFingerprint = true
    | mMaxAvailableTimes = 3
    | mNumberOfFailures = 3
    | shadow$klass = com.wei.android.lib.fingerprintidentify.impl.AndroidFingerprint
    | shadow$monitor = 0

  • Instance of com.action.auth.FingerFragment$1
    | static $staticOverhead = byte[16]@319643905 (0x130d6101)
    | static serialVersionUID = 1507510557745299662
    | static $change = null
    | this$0 = com.action.auth.FingerFragment@314717632 (0x12c235c0)
    | shadow$klass = com.action.auth.FingerFragment$1
    | shadow$monitor = 0

  • Instance of com.action.auth.FingerFragment
    | static $staticOverhead = byte[16]@318609409 (0x12fd9801)
    | static serialVersionUID = 2899110757379337658
    | static $change = null
    | ivFinger = null
    | mCustomPopWindow = null
    | mFingerprintIdentifyListener = null
    | mFingerprintIdentity = com.wei.android.lib.fingerprintidentify.FingerprintIdentify@317179552 (0x12e7c6a0)
    | parentView = null
    | titleBar = null
    | tvChangeLogin = null
    | tvTip = null
    | tvUsername = null
    | view = null
    | dialog = null
    | mCountDownTimerUtils = null
    | activity = null
    | baseListFragment = com.csii.core.control.ActionFragment@317112880 (0x12e6c230)
    | observer = com.csii.core.base.BaseFragment$1@317178848 (0x12e7c3e0)
    | mAdded = false
    | mAnimationInfo = null
    | mArguments = android.os.Bundle@318142848 (0x12f67980)
    | mBackStackNesting = 0
    | mCalled = true
    | mCheckedForLoaderManager = false
    | mChildFragmentManager = null
    | mChildNonConfig = null
    | mContainer = null
    | mContainerId = 0
    | mDeferStart = false
    | mDetached = false
    | mFragmentId = 0
    | mFragmentManager = null
    | mFromLayout = false
    | mHasMenu = false
    | mHidden = false
    | mHiddenChanged = false
    | mHost = null
    | mInLayout = false
    | mIndex = -1
    | mInnerView = null
    | mIsNewlyAdded = false
    | mLoaderManager = null
    | mLoadersStarted = false
    | mMenuVisible = true
    | mParentFragment = com.csii.core.control.ActionFragment@317112880 (0x12e6c230)

| mPostponedAlpha = 0.0
| mRemoving = false
| mRestored = false
| mRetainInstance = false
| mRetaining = false
| mSavedFragmentState = null
| mSavedViewState = null
| mState = 0
| mTag = null
| mTarget = null
| mTargetIndex = -1
| mTargetRequestCode = 0
| mUserVisibleHint = true
| mView = null
| mWho = null
| shadow$klass = com.action.auth.FingerFragment
| shadow$monitor = -2061317332

  • Instance of com.csii.core.control.ActionFragment
    | baseFragment = com.action.auth.FingerFragment@314717632 (0x12c235c0)
    | activity = com.csii.core.control.ActionActivity@316243520 (0x12d97e40)
    | fgList = java.util.ArrayList@318142816 (0x12f67960)
    | view = android.widget.FrameLayout@320879616 (0x13203c00)
    | mAdded = false
    | mAnimationInfo = null
    | mArguments = android.os.Bundle@318142848 (0x12f67980)
    | mBackStackNesting = 0
    | mCalled = true
    | mCheckedForLoaderManager = false
    | mChildFragmentManager = null
    | mChildNonConfig = null
    | mContainer = null
    | mContainerId = 0
    | mDeferStart = false
    | mDetached = false
    | mFragmentId = 0
    | mFragmentManager = null
    | mFromLayout = false
    | mHasMenu = false
    | mHidden = false
    | mHiddenChanged = false
    | mHost = null
    | mInLayout = false
    | mIndex = -1
    | mInnerView = null
    | mIsNewlyAdded = false
    | mLoaderManager = null
    | mLoadersStarted = false
    | mMenuVisible = true
    | mParentFragment = null
    | mPostponedAlpha = 0.0
    | mRemoving = false
    | mRestored = false
    | mRetainInstance = false
    | mRetaining = false
    | mSavedFragmentState = null
    | mSavedViewState = null
    | mState = 0
    | mTag = null
    | mTarget = null
    | mTargetIndex = -1
    | mTargetRequestCode = 0
    | mUserVisibleHint = true
    | mView = null
    | mWho = null
    | shadow$klass = com.csii.core.control.ActionFragment
    | shadow$monitor = 0
  • Instance of com.csii.core.control.ActionActivity
    | FragmentListContentId = 4438
    | actionFg = com.csii.core.control.ActionFragment@317112880 (0x12e6c230)
    | backTime = 1501573610988
    | baseAt = null
    | dialog = com.csii.core.view.AlertDialog@316484992 (0x12dd2d80)
    | isBack = false
    | observer = com.csii.core.base.BaseActivity$1@317142480 (0x12e735d0)
    | onTimeOutListener = null
    | sharedPreUtil = com.csii.core.util.SharedPreUtil@317144480 (0x12e73da0)
    | view = android.widget.FrameLayout@320875520 (0x13202c00)
    | CallBackIntent = null
    | dialog = com.csii.ui.util.MyAlertDialog@316485376 (0x12dd2f00)
    | dialogTime = 60000
    | isRunning = false
    | threadPool = java.util.concurrent.ThreadPoolExecutor@317842784 (0x12f1e560)
    | mCreated = true
    | mFragments = android.support.v4.app.FragmentController@317142368 (0x12e73560)

| mHandler = android.support.v4.app.FragmentActivity$1@318099904 (0x12f5d1c0)
| mNextCandidateRequestIndex = 0
| mOptionsMenuInvalidated = false
| mPendingFragmentActivityResults = android.support.v4.util.SparseArrayCompat@318101344 (0x12f5d760)
| mReallyStopped = true
| mRequestedPermissionsFromFragment = false
| mResumed = false
| mRetaining = false
| mStopped = true
| mStartedActivityFromFragment = false
| mStartedIntentSenderFromFragment = false
| mExtraDataMap = android.support.v4.util.SimpleArrayMap@318099840 (0x12f5d180)
| mActionBar = null
| mActionModeTypeStarting = 0
| mActivityInfo = android.content.pm.ActivityInfo@316324224 (0x12dab980)
| mActivityTransitionState = android.app.ActivityTransitionState@317360896 (0x12ea8b00)
| mApplication = com.csii.ui.Application.NApplication@316640576 (0x12df8d40)
| mCalled = true
| mChangeCanvasToTranslucent = false
| mChangingConfigurations = false
| mComponent = android.content.ComponentName@315576512 (0x12cf50c0)
| mConfigChangeFlags = 0
| mCurrentConfig = android.content.res.Configuration@317919856 (0x12f31270)
| mDecor = null
| mDefaultKeyMode = 0
| mDefaultKeySsb = null
| mDestroyed = true
| mDoReportFullyDrawn = false
| mEmbeddedID = null
| mEnableDefaultActionBarUp = false
| mEnterTransitionListener = android.app.SharedElementCallback$1@1893198088 (0x70d7e908)
| mExitTransitionListener = android.app.SharedElementCallback$1@1893198088 (0x70d7e908)
| mFinished = true
| mFragments = android.app.FragmentController@317142320 (0x12e73530)
| mHandler = android.os.Handler@318099744 (0x12f5d120)
| mHasCurrentPermissionsRequest = false
| mIdent = 153034467
| mInstanceTracker = android.os.StrictMode$InstanceTracker@317142336 (0x12e73540)
| mInstrumentation = cn.jiguang.a.a.c.a.a.d@315966976 (0x12d54600)
| mIntent = android.content.Intent@315388320 (0x12cc71a0)
| mLastNonConfigurationInstances = null
| mMainThread = android.app.ActivityThread@314705888 (0x12c207e0)
| mManagedCursors = java.util.ArrayList@318099808 (0x12f5d160)
| mManagedDialogs = null
| mMenuInflater = null
| mParent = null
| mReferrer = java.lang.String@315524672 (0x12ce8640)
| mResultCode = 101
| mResultData = null
| mResumed = false
| mSearchEvent = null
| mSearchManager = null
| mStartedActivity = false
| mStopped = true
| mTemporaryPause = false
| mTitle = java.lang.String@318402240 (0x12fa6ec0)
| mTitleColor = 0
| mTitleReady = true
| mToken = android.os.BinderProxy@315532352 (0x12cea440)
| mTranslucentCallback = null
| mUiThread = java.lang.Thread@1965257368 (0x75237298)
| mVisibleBehind = false
| mVisibleFromClient = true
| mVisibleFromServer = true
| mVoiceInteractor = null

| mWindow = com.android.internal.policy.MiuiPhoneWindow@316365376 (0x12db5a40)
| mWindowAdded = true
| mWindowManager = android.view.WindowManagerImpl@318100960 (0x12f5d5e0)
| mInflater = com.android.internal.policy.PhoneLayoutInflater@319041984 (0x130431c0)
| mOverrideConfiguration = null
| mResources = android.content.res.MiuiResources@316322176 (0x12dab180)
| mTheme = android.content.res.Resources$Theme@318100992 (0x12f5d600)
| mThemeResource = 16973837
| mBase = android.app.ContextImpl@316482944 (0x12dd2580)
| shadow$klass = com.csii.core.control.ActionActivity
| shadow$monitor = 1302541209

  • Excluded Refs:
    | Field: android.view.inputmethod.InputMethodManager.mNextServedView
    | Field: android.view.inputmethod.InputMethodManager.mServedView
    | Field: android.view.inputmethod.InputMethodManager.mServedInputConnection
    | Field: android.view.inputmethod.InputMethodManager.mCurRootView
    | Field: android.os.UserManager.mContext
    | Field: android.net.ConnectivityManager.sInstance
    | Field: android.view.Choreographer$FrameDisplayEventReceiver.mMessageQueue (always)
    | Thread:FinalizerWatchdogDaemon (always)
    | Thread:main (always)
    | Thread:LeakCanary-Heap-Dump (always)
    | Class:java.lang.ref.WeakReference (always)
    | Class:java.lang.ref.SoftReference (always)
    | Class:java.lang.ref.PhantomReference (always)
    | Class:java.lang.ref.Finalizer (always)
    | Class:java.lang.ref.FinalizerReference (always)

MX4pro的问题

在魅族MX4pro上面 FingerprintManager.open()返回为null ,无法使用 大神有解决过在这个手机上使用指纹识别么

调用mFingerprintIdentify.cancelIdentify()报错

在Fragment中调用mFingerprintIdentify.cancelIdentify();报如下错误
Exception: Attempt to invoke interface method 'android.os.IBinder com.fingerprints.service.IFingerprintClient.asBinder()' on a null object reference,求解?

startIdentify 的五种状态问题

@uccmawei 这几种状态 onNotMatch 里面 availableTimesjihu次数用完时,再用错误的手指进行指纹识别是时,并没有弹出Toast ,我这样的用法是对的么?
p7yldt8 y4 8w1wkd 4x xl

关于OPPO R9指纹

FingerprintManagerCompat.class
static {
final int version = Build.VERSION.SDK_INT;
if (version >= 23) {
IMPL = new Api23FingerprintManagerCompatImpl();
} else {
IMPL = new LegacyFingerprintManagerCompatImpl();
}
}

这个类还需要改一改,因为OPPO R9 是Android 5.1,可能需要单独判断一下

你好 我用这个出现一个问题

这是错误日志
E/art: Failed sending reply to debugger: Broken pipe
E/测试: exception+| Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
E/测试: exception+| context passed is null.
E/MzFingerManager: get fp method time, mService = null
E/测试: 初始化指纹
E/关闭: cancelIdentify
没有成功回调 不知道是哪的问题 我用锤子手机和zuk的手机都是这个问题

OPPO R9 指纹识别问题

OPPO R9 系统版本是 5.1
但是官方声称是基于官方源码修改的,支持官方API
作者的库无法在OPPO R9上使用

FingerprintManagerCompatApi23 类下的 这个方法
private static FingerprintManager getFingerprintManagerOrNull(Context context) {
return context.getSystemService(FingerprintManager.class);
}

我对 OPPO R9 进行的单独判断

private static FingerprintManager getFingerprintManagerOrNull(Context context) {
return (FingerprintManager) context.getSystemService(FINGERPRINT_SERVICE);
}

可以正常使用 OPPO R9 指纹识别

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.