按home键重启判断是否显示手势

本文详细介绍了BaseActivity类的实现,该类扩展了FragmentActivity并管理了多个组件,如MyBroadcastReceiver和LocalBroadcastManager。它覆盖了关键的生命周期方法,如onCreate、onResume、onStop和onDestroy,以注册和注销广播接收器,处理应用前后台状态,并通过isAppOnFreground方法检查当前应用是否处于前台运行。此外,还提供了isShowGesture方法用于特定条件下的手势解锁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class BaseActivity extends FragmentActivity {

    private MyBroadcastReceiver mBroadcastReceiver;
    private LocalBroadcastManager mLocalBroadcastManager;
    protected Dialog progressDialog;
    private boolean isTimeOut;
    private boolean isMainAct;
    private boolean isActive = true;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setTranslucentStatus();
        ActivityManager.getAppManager().addActivity(this);

        mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
        mBroadcastReceiver = new MyBroadcastReceiver();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(Constant.TOKEN_UPDATE_ACTION);
        mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, intentFilter);

        isMainAct = this instanceof MainActivity;
        if (isMainAct) {
            isShowGesture();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();

        if (!isActive) {
            isActive = true;

            isTimeOut = DateUtil.checkTimeOut(10 * 1000);
            if (isTimeOut) {
                isShowGesture();
            }
        }
    }

    @Override
    protected void onStop() {
        super.onStop();

        if (!isAppOnFreground()) {
            isActive = false;
            SharePerfenceUtil.setClickHomeTime(System.currentTimeMillis());
        }
    }

    /**
     * 是否在后台
     */
    public boolean isAppOnFreground(){
        android.app.ActivityManager am = (android.app.ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
        String curPackageName = getApplicationContext().getPackageName();
        List<android.app.ActivityManager.RunningAppProcessInfo> app = am.getRunningAppProcesses();
        if(app==null){
            return false;
        }
        for(android.app.ActivityManager.RunningAppProcessInfo a:app){
            if(a.processName.equals(curPackageName)&&
                    a.importance == android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND){
                return true;
            }
        }
        return false;
    }

    @Override
    protected void onPause() {
        super.onPause();

        if (progressDialog != null) {
            if (progressDialog.isShowing()) {
                progressDialog.dismiss();
            }
            progressDialog = null;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityManager.getAppManager().finishActivity(this);

        if (mLocalBroadcastManager != null && mBroadcastReceiver != null) {
            mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);
        }
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (KeyEvent.KEYCODE_BACK == keyCode) {
            if (mLocalBroadcastManager != null && mBroadcastReceiver != null) {
                mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);
            }
        }

        return super.onKeyDown(keyCode, event);
    }

    private void isShowGesture() {
        Activity currentActivity = ActivityManager.getAppManager().currentActivity();
        if (currentActivity instanceof GestureUnlockActivity) {
            return;
        }

        boolean isGestureOpen = (boolean) SharePerfenceUtil.getParam(SPKeys.ISGESTUREOPEN, false);
        if ((isMainAct || isTimeOut)  && isGestureOpen) {
            Intent intent = new Intent(this, GestureUnlockActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("fromMainAct", "fromMainAct");
            intent.putExtras(bundle);
            startActivity(intent);
        }
    }

    //判断Activity是否Destroy
    protected boolean isDestroy(Activity activity) {
        return activity == null || activity.isFinishing() ||
                (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed());
    }
}
Public class DateUtil {
    public static boolean checkTimeOut(long limitTime) {
        long endtime = System.currentTimeMillis();
        return endtime - SharePerfenceUtil.getClickHomeTime() >= limitTime;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值