Vấn đề của tôi tương tự như của bạn: nếu ai đó gửi ứng dụng của tôi về nền bằng cách nhấn nút Home, nó vẫn giữ quyền kiểm soát Cảm biến vân tay, vì vậy không ai khác có thể sử dụng nó. Kêu gọi hủy bỏ từ hoạt động onPause() không được làm việc:
@Override
protected void onPause() {
super.onPause();
/**
* We are cancelling the Fingerprint Authentication
* when application is going to background
*/
if (fingerprintHelper!=null && fingerprintHelper instanceof AndroidFingerprintHelper){
log.info("canceling AndroidFingerprintHelper dialog");
fingerprintHelper.cancelIdentify();
}
}
Bạn cần phải gọi phương thức cancel()
của CancellationSignal
của bạn trong phương pháp của hoạt động của bạn onPause()
nhưng trướcsuper.onPause()
. Nếu không, bạn sẽ nhận được cảnh báo
Từ chối your.package.name.; không trong foreground
cancelAuthentication(): từ chối tên gói của bạn
Tôi đã tìm kiếm mã nguồn của FingerPrint Dịch vụ Android và tôi đã tìm thấy dòng này:
public void cancelAuthentication(final IBinder token, String opPackageName) {
if (!canUseFingerprint(opPackageName, false /* foregroundOnly */)) {
return;
}
//we don't get here
...
...
}
nơi canUseFingerprint là thực sự kiểm tra xem chúng tôi có tiền cảnh hay không (một trong những điều đó):
private boolean canUseFingerprint(String opPackageName, boolean foregroundOnly) {
if (foregroundOnly && !isForegroundActivity(uid, pid)) {
Slog.v(TAG, "Rejecting " + opPackageName + " ; not in foreground");
return false;
}
//we don't get here
}
Điều này wa y, chúng tôi không bao giờ có thể gọi cancelAuth từ nền. Và Android cho rằng chúng ta đang ở chế độ nền sau khi gọi super.onPause();
. Sau nhiều giờ nghiên cứu các giải pháp duy nhất mà tôi đã tìm thấy là để trao đổi các hủy hành động và super.onPause():
@Override
protected void onPause() {
/**
* We are cancelling the Fingerprint Authentication
* when application is going to background
*/
if (fingerprintHelper!=null && fingerprintHelper instanceof AndroidFingerprintHelper){
log.info("canceling AndroidFingerprintHelper dialog");
fingerprintHelper.cancelIdentify();
}
super.onPause();
}
Làm việc đối với tôi trên Android M và N. Hope this helps.
Có onAuthenticationError xảy ra trước hoặc sau phương thức onPause của bạn không? – Wossname
Xin chào Philipp, bạn đã tìm ra vấn đề chưa? nếu vậy bạn có thể vui lòng chia sẻ giải pháp, cảm ơn! – Xcihnegn