之前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 可以变成一项服务并在其他各种活动中使用。活动只需要能够接收包并使用基本逻辑进一步处理。
我已经在这方面工作了很长一段时间但无法弄清楚,尽管我认为这会相对容易。我正在使用 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 可以变成一项服务并在其他各种活动中使用。活动只需要能够接收包并使用基本逻辑进一步处理。