android 제스처 잠금 해제-------백그라운드 복구 후 제스처 잠금 해제 시작

11509 단어 옮겨 싣다
우리는 알리페이를 사용할 때 리턴 키나 홈 키를 누르고 데스크톱으로 돌아간 다음에 이 앱을 다시 열 때 제스처를 입력하라고 요구하고 정확하게 입력한 후에 우리가 앱을 종료했을 때의activity로 돌아간다는 것을 발견할 수 있다. 이 효과는 어떻게 실현될 것인가.
우선 백엔드에서 프론트 데스크톱의 동작 해제를 복원해야 하는 모든activity를 위해baseActivity를 작성해야 한다. 이baseActivity에서 그 몇 가지 방법을 다시 쓰기 전에 분석,activity의 성명 주기를 작성해야 한다.우리가 리셋 키를 눌렀을 때activity는onpause->onstop->ondestory를 실행하고, 리셋 프로그램은oncreate->onstart->onresume를 실행합니다.홈키를 눌렀을 때 온파우스트->onStop을 실행하고 리셋 앱은 온리스타트->onstart->onresume를 실행합니다. 온스톱 방법, 온스타트 방법, 온파우스 방법과 온리소스 방법을 모두 실행한다는 것을 명확히 할 수 있습니다. 여기서 온스톱 방법, 온리소스 방법 두 가지 방법을 골라서 리셋을 합니다. 온스톱 방법에서 해야 할 일은 이 앱이 아직도 프론트에서 실행되고 있는지 판단하는 것입니다.그리고 로고 위치로 이미 백스테이지에 기록되어 있습니다.resume 방법에서 로고 위치를 판단합니다. 백엔드에서 실행되면 제스처activity를 시작하십시오. 그렇지 않으면 아무런 조작도 하지 않습니다.
BaseActivity 코드는 다음과 같습니다.
public class BaseActivity extends FragmentActivity {

    static boolean isActive = true;

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        if (!isAppOnFreground()) {
            Log.d("sqq", "back");
            isActive = false;
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (!isActive) {
            //     
            isActive = true;
            Intent n = new Intent(this, LoginActivity.class);
            startActivity(n);
            finish();
        }
    }

    /**
     *      
     *
     * @return
     */
    public boolean isAppOnFreground() {
        ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
        String curPackageName = getApplicationContext().getPackageName();
        List app = am.getRunningAppProcesses();
        if (app == null) {
            return false;
        }
        for (ActivityManager.RunningAppProcessInfo a : app) {
            if (a.processName.equals(curPackageName) &&
                    a.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                return true;
            }
        }
        return false;
        /*ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
        if(!TextUtils.isEmpty(curPackageName)&&curPackageName.equals(getPackageName())){
            return true;
        }
        return false;*/
    }

    /**
     *             
     */
    private boolean isScreenOFF() {

/**false      */
        boolean isScreenOff = false;

/**true     */
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        isScreenOff = pm.isScreenOn();

        return !isScreenOff;
    }
}

매번 프론트 데스크를 복구할 때마다 제스처를 검증해야 합니다.
LoginActivity
의 실현은 다음과 같다.
public class LoginActivity extends Activity {
    private LocusPassWordView lpwv;//    
    private TextView tvtitle;
    private String password;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        lpwv = (LocusPassWordView) this.findViewById(R.id.mLocusPassWordView);
        tvtitle=(TextView)findViewById(R.id.tv_locktitle);
        tvtitle.setText(R.string.str_lockpatterntitle);
        lpwv.setOnCompleteListener(new LocusPassWordView.OnCompleteListener()
        {
            @Override
            public void onComplete(String mPassword)
            {
                SharedPreferences settings = getSharedPreferences(
                        "USERINFO", Context.MODE_WORLD_READABLE );
                 password=settings.getString("pattern_password", "");

                    if(password.equals(mPassword))
                    {
                        Intent intent = new Intent(LoginActivity.this, SmartDoorMainActivity.class);
                        startActivity(intent);
                        LoginActivity.this.finish();
                       
                    }
                    else
                    {
                        
                        tvtitle.setText(R.string.str_input_err);
                       
                        lpwv.clearPassword();
                    }
                }


        });
    }
}

Loginactivity는 제스처를 입력하는 페이지입니다.

좋은 웹페이지 즐겨찾기