android屏幕锁屏后在某个界面里需要重新输入密码

最近做项目,用户需要在账单界面加入四位简码输入验证的功能,类似于支付宝那样的,屏幕黑屏以后,再次打开,再次进入账单界面的 时候需要重新输入四位简码,主界面我们是用Activity实现,几个模块的一级界面都是fragment,因此上述需求涉及到三个主要问题,

第一个问题,账单界面的fragment如果用户输入正确了,该fragment如何通知主界面Activity,这个问题的本质是fragment和Activity之间通信的问题。解决办法就是采用回调函数,具体点说,就是在fragment里写个内部类的接口,然后让Activity来继承这个接口,并在Activity里面去实现,那么fragment怎么和Activity关联到一起呢,常识问题,fragment启动时会调用生命周期的onAttach函数,它的函数原型如下:

	@Override
	public void onAttach(Activity activity) {
		// TODO Auto-generated method stub
		super.onAttach(activity);
	}
很明显,这个参数就是主Activity,因此在这里将接口绑定到Activity就行了。当然了,在fragment里要声明一个内部内接口的变量,比如命名为mListener。

	private OnGoHomeAndLockListener mListener;//
	@Override
	public void onAttach(Activity activity) {
		// TODO Auto-generated method stub
		super.onAttach(activity);
		try {
            <span style="color:#ff6666;">mListener = (OnGoHomeAndLockListener) activity;</span>
         } catch (ClassCastException e) {
        	Toast.makeText(getActivity(), activity.toString() + "没有实现回调接口哦 OnGoHomeAndLockListener", Toast.LENGTH_SHORT).show();
            //throw new ClassCastException(activity.toString() + " must implementOnArticleSelectedListener");
        }
	}

fragment里的接口的定义如下,这是个内部类,要写在fragment子类里面

	//返回主界面回调接口
	public interface OnGoHomeAndLockListener {
        public void onGoHomeAndLockListener();
    }

当然,主Activity还要继承该接口,具体代码如下:

public class IndexPageActivity extends FragmentActivity implements
		OnClickListener,OnGoHomeListener,OnGoHomeAndLockListener{
.........
}

fragment里定义和绑定都搞定了,就是调用这个接口里的函数了,具体在哪里调用是第三个问题。

第二个问题,怎么判断手机屏幕锁屏,这个问题就是常识问题,手机锁屏会发送广播,写一个类来接收广播,然后在监听到锁屏的时候,把锁屏状态记录下来,写入sharereference里面,


第三个问题,锁屏后再次打开app的时候,什么时候打开验证界面,让用户输入密码,而且不影响用户查看其它模块的信息呢? 这个问题其实的本质是fragment的生命周期的问题,首先,因为我要实现的需求是,当用户选择了账单这个模块以后,才弹出验证界面,用户如果不验证,还是可以看其它模块的信息的,所以,要弹出验证界面肯定是在这个账单fragment的生命周期里,下一个问题是,具体在fragment的哪个生命周期函数里来通知Activity更换账单fragment为验证fragment呢,很简单,又是常识问题,当锁屏的时候,屏幕黑掉之前会调用fragment和Activity的onPause函数,当唤醒屏幕后,打开应用,会执行fragment和Activity的onResume函数,所以,通知Activity更换fragment的操作要放在账单fragment的onResume函数中。调用语句如下:

	@Override
	public void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		mListener.onGoHomeAndLockListener();
		Log.i("diao", "PaymentFragment-------------onResume");
	}
具体在这个接口函数onGoHomeAndLockListener做什么,当然是隐藏之前的账单fragment,显示验证fragment具体代码如下,这部分代码是在实现了onGoHomeAndLockListener接口的Activity中。代码中首先判断了一下屏幕锁屏的状态和当前显示的fragment是否是账单fragment,如果不判断当前显示的fragment是不是账单fragment的话,用户就无法查看其它模块了,代码中pay_F是账单fragment,lock_F是锁屏fragment。

	@Override
	public void onGoHomeAndLockListener() {
		// TODO Auto-generated method stub
		//判断是否用户之前锁屏
		if(mySharedPreferences.getString("ScreenState", "off").equals("off") 
				&&
				pay_F.isVisible()){
			// 锁屏界面
			if (lock_F == null) {
				lock_F = new PaymentLockFragment();
				// 判断当前界面是否隐藏,如果隐藏就进行添加显示,false表示显示,true表示当前界面隐藏
				if (!lock_F.isHidden()) {
					addFragment(lock_F);
					showFragment(lock_F);
				}
			}
			else {
				if (lock_F.isHidden()) {
					showFragment(lock_F);
				}
			}
		}
	}
具体锁屏后的效果图如下:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值