代码之家  ›  专栏  ›  技术社区  ›  Pedro

如何在认证成功后完成活动

  •  0
  • Pedro  · 技术社区  · 6 年前

    我正在尝试在FingerAuthentification成功后完成登录活动,我尝试使用“Finish()”和“FinishAffinity()”,但我得到一个错误“cannot resolver method finish()or finishAffinity()”

    @TargetApi(Build.VERSION_CODES.M)
    public class FingerprintHandler extends FingerprintManager.AuthenticationCallback {
    
        private CancellationSignal cancellationSignal;
        private Context context;
    
        public FingerprintHandler(Context mcontext) { context = mcontext; }
    
        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) {
            Toast.makeText(context,"Authentication error\n" + errString, Toast.LENGTH_LONG).show();
        }
    
        @Override
        public void onAuthenticationFailed() {
            Toast.makeText(context, "Authentication failed", Toast.LENGTH_LONG).show();
        }
    
        public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
            Toast.makeText(context, "Authentication help\n" + helpString, Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
            Toast.makeText(context, "Authentication Success!!", Toast.LENGTH_SHORT).show();
            Handler hd = new Handler();
            hd.postDelayed(new Runnable() {
                @Override
                public void run() {
                    context.startActivity(new Intent(context, MainActivity.class));
                    FingerLogin.finish();
                }
            }, 2000);
        }
    }
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Susmit Agrawal Sudip Bolakhe    6 年前

    我以前没有尝试过,但理论上这应该是可行的:

    步骤1:在构造函数中传递 Activity 而不是 Context . 这是 要完成的活动。

    步骤2:将此活动分配给一个私有变量。

    第3步:呼叫 finish() 在需要时打开变量。

    代码如下:

    public class FingerprintHandler extends FingerprintManager.AuthenticationCallback {
    
        private CancellationSignal cancellationSignal;
        private Activity activity;
    
        public FingerprintHandler(Activity mActivity) { activity = mActivity; }
    
        .....
    
        @Override
        public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
        Toast.makeText(activity.getApplicationContext(), "Authentication Success!!", Toast.LENGTH_SHORT).show();
        Handler hd = new Handler();
        hd.postDelayed(new Runnable() {
            @Override
            public void run() {
                activity.startActivity(new Intent(context, MainActivity.class));
                activity.finish();
            }
        }, 2000);
    
        2
  •  2
  •   Jeffrey Blattman    6 年前

    finish() 是上的方法 Activity 不是 Context . 你无法完成上下文。不清楚您是否在活动的上下文中运行。如果是,打电话 完成() 你自己(或 YourActivity.this.finish() )

        3
  •  1
  •   MRah    6 年前

    使用此选项可以访问活动的重写方法:

               if(context instanceof FingerLogin){
                       ((FingerLogin)context).finish();
               }