xamarin-fingerprint
xamarin-fingerprint copied to clipboard
Authenticate onResume get error "Cannot perform this action after OnSaveInstanceState" (Android)
Hi When I put the application to sleep,"move to the background" and then resume I get an error. The idea is that we should lock the app after a period of inactivity.
I have tried all sorts of things but I cannot seem to fix it. Could you please let me know of a workaround?.
Many thanks for your time!!
Steps to reproduce
-
In the app.xaml.OnSleep method put a timer
-
in the app.xaml.Resume method call to authenticate again
-
you will receive the error (see below)
`
//sample noddy code
//app.xaml
private static Timer timeOutTimer;
protected override void OnSleep()
{
base.OnSleep();
// Handle when your app sleeps
timeOutTimer = new Timer { Interval = new TimeSpan(0, 0, 0, 3).TotalMilliseconds };
timeOutTimer.Elapsed += OnTimeOutTimerOnElapsed;
timeOutTimer.Enabled = true;
}
protected override void OnResume()
{
base.OnResume();
// Handle when your app resumes
timeOutTimer.Elapsed -= OnTimerElapsed;
timeOutTimer.Enabled = false;
}
private async void OnTimerElapsed(object sender, ElapsedEventArgs e)
{
var authHelper = new AuthHelper();
await authHelper.AuthenticationAsync();
}
public class AuthHelper
{
public async Task<FingerprintAuthenticationResult> AuthenticationAsync()
{
var dialogConfig = new AuthenticationRequestConfiguration("Put your finger!")
{ // all optional
CancelTitle = "Cancel",
};
try
{
var result = await Plugin.Fingerprint.CrossFingerprint.Current.AuthenticateAsync(dialogConfig);
return result;
}
catch (Exception ex)
{
Console.WriteLine(ex);
return null;
}
}
}`
Expected behavior
It should just authenticate again
Actual behavior
I get an error "Can not perform this action after onSaveInstanceState Java.Lang.IllegalStateException: Can not perform this action after onSaveInstanceState"
Crashlog
I/mono-stdout(19205): Java.Lang.IllegalStateException: Can not perform this action after onSaveInstanceState Java.Lang.IllegalStateException: Can not perform this action after onSaveInstanceState at Java.Interop.JniEnvironment+InstanceMethods.CallNonvirtualVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00089] in <8acc8089c2ed40d08469fbaa6710a44c>:0 at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x0005d] in <8acc8089c2ed40d08469fbaa6710a44c>:0 03-09 06:37:15.960 I/mono-stdout(19205): at Java.Interop.JniEnvironment+InstanceMethods.CallNonvirtualVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00089] in <8acc8089c2ed40d08469fbaa6710a44c>:0 03-09 06:37:15.960 I/mono-stdout(19205): at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x0005d] in <8acc8089c2ed40d08469fbaa6710a44c>:0 03-09 06:37:15.961 I/mono-stdout(19205): at Android.App.DialogFragment.Show (Android.App.FragmentManager manager, System.String tag) [0x0004b] in <957bbfdfda4341e2939c881206c1140a>:0 at Android.App.DialogFragment.Show (Android.App.FragmentManager manager, System.String tag) [0x0004b] in <957bbfdfda4341e2939c881206c1140a>:0 at Plugin.Fingerprint.Dialog.FingerprintDialogFragment.Show (Android.App.FragmentManager manager, System.String tag) [0x0000b] in C:\Projekte\xamarin-fingerprint\src\Plugin.Fingerprint.Android\Dialog\FingerprintDialogFragment.cs:117 at Plugin.Fingerprint.Dialog.FingerprintDialogFragment+<ShowAsync>d__21.MoveNext () [0x0002f] in C:\Projekte\xamarin-fingerprint\src\Plugin.Fingerprint.Android\Dialog\FingerprintDialogFragment.cs:106 --- End of stack trace from previous location where exception was thrown ---
03-09 06:37:15.962 I/mono-stdout(19205): at Plugin.Fingerprint.Dialog.FingerprintDialogFragment.Show (Android.App.FragmentManager manager, System.String tag) [0x0000b] in C:\Projekte\xamarin-fingerprint\src\Plugin.Fingerprint.Android\Dialog\FingerprintDialogFragment.cs:117 03-09 06:37:15.962 I/mono-stdout(19205): at Plugin.Fingerprint.Dialog.FingerprintDialogFragment+<ShowAsync>d__21.MoveNext () [0x0002f] in C:\Projekte\xamarin-fingerprint\src\Plugin.Fingerprint.Android\Dialog\FingerprintDialogFragment.cs:106 03-09 06:37:15.963 I/mono-stdout(19205): --- End of stack trace from previous location where exception was thrown --- 03-09 06:37:15.964 I/mono-stdout(19205): at Plugin.Fingerprint.Contract.AndroidFingerprintImplementationBase+<NativeAuthenticateAsync>d__0.MoveNext () [0x00042] in C:\Projekte\xamarin-fingerprint\src\Plugin.Fingerprint.Android\Contract\AndroidFingerprintImplementationBase.cs:17 at Plugin.Fingerprint.Contract.AndroidFingerprintImplementationBase+<NativeAuthenticateAsync>d__0.MoveNext () [0x00042] in C:\Projekte\xamarin-fingerprint\src\Plugin.Fingerprint.Android\Contract\AndroidFingerprintImplementationBase.cs:17 --- End of stack trace from previous location where exception was thrown --- at Plugin.Fingerprint.Abstractions.FingerprintImplementationBase+<AuthenticateAsync>d__1.MoveNext () [0x000bb] in C:\Projekte\xamarin-fingerprint\src\Plugin.Fingerprint.Abstractions\FingerprintImplementationBase.cs:25 --- End of stack trace from previous location where exception was thrown --- at FingerprintDroid.AuthHelper+<AuthenticationAsync>d__1.MoveNext () [0x00053] in C:\Dev\Mobile\Android\FingerprintDroid\FingerprintDroid\AuthHelper.cs:23 03-09 06:37:15.964 I/mono-stdout(19205): --- End of stack trace from previous location where exception was thrown --- 03-09 06:37:15.965 I/mono-stdout(19205): at Plugin.Fingerprint.Abstractions.FingerprintImplementationBase+<AuthenticateAsync>d__1.MoveNext () [0x000bb] in C:\Projekte\xamarin-fingerprint\src\Plugin.Fingerprint.Abstractions\FingerprintImplementationBase.cs:25 03-09 06:37:15.965 I/mono-stdout(19205): --- End of stack trace from previous location where exception was thrown --- --- End of managed Java.Lang.IllegalStateException stack trace --- java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1881) at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1904) at android.app.BackStackRecord.commitInternal(BackStackRecord.java:688) at android.app.BackStackRecord.commit(BackStackRecord.java:646)
03-09 06:37:15.966 I/mono-stdout(19205): at FingerprintDroid.AuthHelper+<AuthenticationAsync>d__1.MoveNext () [0x00053] in C:\Dev\Mobile\Android\FingerprintDroid\FingerprintDroid\AuthHelper.cs:23 03-09 06:37:15.966 I/mono-stdout(19205): --- End of managed Java.Lang.IllegalStateException stack trace --- 03-09 06:37:15.967 I/mono-stdout(19205): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 03-09 06:37:15.967 I/mono-stdout(19205): at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1881) 03-09 06:37:15.968 I/mono-stdout(19205): at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1904) 03-09 06:37:15.968 I/mono-stdout(19205): at android.app.BackStackRecord.commitInternal(BackStackRecord.java:688) at android.app.DialogFragment.show(DialogFragment.java:238) 03-09 06:37:15.969 I/mono-stdout(19205): at android.app.BackStackRecord.commit(BackStackRecord.java:646) 03-09 06:37:15.969 I/mono-stdout(19205): at android.app.DialogFragment.show(DialogFragment.java:238) 03-09 06:37:15.970 I/mono-stdout(19205): Thread finished: <Thread Pool> #6 The thread 0x6 has exited with code 0 (0x0). Thread finished: <Thread Pool> #4 The thread 0x4 has exited with code 0 (0x0).
Configuration
Version of the Plugin: 1.49
**Platform:**Android 8.1
Device: e.g. any device
Hi @developer9969,
I'm the friendly issue checker. Thanks for using the issue template :star2: I appreciate it very much. I'm sure, the maintainers of this repository will answer, soon.
+1
This issue is also happening with me on multiple devices and different android versions. Any solution?
I'm also facing this, any update?
I am also seeing this issue. Anyone find a resolution or workaround?
I am making an assumption here. I think the owner no longer supports this plugin.I have not seen any reply to anybody lately. I hope I am wrong
Same problem with Plugin.Fingerprint 1.4.9 causing app crash but it seems to be in another place:
FingerprintDialogFragment.Show (Android.App.FragmentManager manager, System.String tag) Java.Lang.IllegalStateException: Can not perform this action after onSaveInstanceState
Stack
JniEnvironment+InstanceMethods.CallNonvirtualVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) DialogFragment.Show (Android.App.FragmentManager manager, System.String tag) FingerprintDialogFragment.Show (Android.App.FragmentManager manager, System.String tag) FingerprintDialogFragment.ShowAsync (Plugin.Fingerprint.Abstractions.AuthenticationRequestConfiguration config, Plugin.Fingerprint.Contract.IAndroidFingerprintImplementation implementation, System.Threading.CancellationToken cancellationToken) AndroidFingerprintImplementationBase.NativeAuthenticateAsync (Plugin.Fingerprint.Abstractions.AuthenticationRequestConfiguration authRequestConfig, System.Threading.CancellationToken cancellationToken) FingerprintImplementationBase.AuthenticateAsync (Plugin.Fingerprint.Abstractions.AuthenticationRequestConfiguration authRequestConfig, System.Threading.CancellationToken cancellationToken)