之前activity的指纹认证如何获取结果?

How to get results for fingerprint authentication in previous activity?

我已经在这方面工作了很长一段时间但无法弄清楚,尽管我认为这会相对容易。我正在使用 Android 的 FingerprintManager 通过指纹对用户进行身份验证,并且效果很好。问题是我无法从我的助手 class 那里得到身份验证结果,这非常令人沮丧。我对使用助手 classes 还很陌生,在广泛搜索它之后,我仍然无法将身份验证结果返回到我的 activity。我最大的希望是将意图与 onActivityResult 一起使用,但是助手 class 从未发出意图(或者至少我的主要 activity 没有收到它)。

作为参考,我的主要 class 是一个 activity,它使用助手 class(扩展 .AuthenticationCallback)来检查他们的指纹。助手 class 包含以下方法:

        public void startAuth(FingerprintManager manager, FingerprintManager.CryptoObject cryptoObject) {

        cancellationSignal = new CancellationSignal();
        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        manager.authenticate(cryptoObject, cancellationSignal, 0, this, null);
    }

    @Override
    public void onAuthenticationError(int errMsgId, CharSequence errString) {

    }

    @Override
    public void onAuthenticationFailed() {

    }

    @Override
    public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
    }

    @Override
    public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
        Toast.makeText(context, "You have Been Successfully authenticated!", Toast.LENGTH_SHORT).show();
    }

来自 activity 的代码只是发出了意图并有一个 onActivityResult 方法:

        Intent btauthenticate = new Intent(getApplicationContext(), FingerPrintMainActivity.class);
    startActivityForResult(authenticate, 1);

指纹验证成功,我收到 toast 消息,但我不知道如何取回结果。我认为一定有一种简单的方法可以返回结果,但我似乎无法弄清楚,这非常令人沮丧。非常感谢任何帮助。

终于找到了适合我的解决方案。我从来没有真正发现为什么 onActivityResult() 从来没有工作过,即使它在我的其他各种活动中工作。最好的猜测是 onActivityResult 是为了在两个活动之间工作(我一直在尝试一个 activity 和一个助手 class)。我认为有一种方法可以让它发挥作用,但我无法弄清楚。也许这与不从 activity 本身启动它有关。

我的解决方案是简单地使用 Handler 来处理数据,然后将 Intent 包发送回原始 activity 以进行处理。

供以后遇到此主题的任何人参考:

Helperclass包含在onAuthenticationSucceeded方法中包含:

        String message = "success" ;
        Message msg = Message.obtain();
        msg.obj = message;
        msg.setTarget(handler1); 
        msg.sendToTarget(); 

Helper class 在 class 的开头包含此内容:

     Handler handler1 = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        String message = (String) msg.obj;
        Log.i(TAG, "Value of message: " + message);

        if (message == "success") {

            Intent intent = new Intent(....this, ....class);
            intent.putExtra("message", message);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);

        }

    }
  };

它启动的 activity 在其 onCreate() 中获取包然后进行处理:

    Bundle bundle = getIntent().getExtras();
    String message = bundle.getString("message");
    if(message...) {
    ....Do Something
    }

我确信这不是最有效的解决方案,但它确实有效。所有这一切的好处是,助手 class 可以变成一项服务并在其他各种活动中使用。活动只需要能够接收包并使用基本逻辑进一步处理。