当恢复最小化或杀死应用程序时,请要求启用针



我在设置中添加了自定义引脚。我想要当该应用被杀死和/或最小化时,要求输入PIN(不是用户的用户名和密码,而是我在应用程序中输入的自定义PIN(

(
    package com.musala.imds.fragments;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.support.v7.preference.PreferenceManager;
import com.musala.imds.utils.SessionUtils;
import android.support.v7.preference.SwitchPreferenceCompat;
import android.widget.CompoundButton;
import android.widget.Toast;
import com.github.orangegangsters.lollipin.lib.managers.AppLock;
import com.musala.imds.R;
import com.musala.imds.activities.CustomPinActivity;
import com.musala.imds.model.Employee;
import com.musala.imds.utils.MDSConstants;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.OnClick;
import io.realm.Realm;
/**
 * Created by lyubomir.angelov on 19.7.2016 г..
 * Preference fragment
 */
public class SettingsFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener {
    private static final int REQUEST_PIN_CODE_ENABLE = 100;
    private static final int REQUEST_PIN_CODE_CHECK = 101;
    private SharedPreferences prefs;
    private PreferenceCategory mCategory;
    private Preference changePin;
    private SwitchPreferenceCompat enableOrDisablePin;
    @Inject
    protected SessionUtils sessionUtils;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
        // Load the preferences from an XML resource
        mCategory = (PreferenceCategory) findPreference(MDSConstants.SETTINGS.PREF_CATEGORY_KEY_PIN);
        changePin = findPreference(MDSConstants.SETTINGS.PREF_KEY_CHANGE_PIN);
        enableOrDisablePin = (SwitchPreferenceCompat) findPreference(MDSConstants.SETTINGS.PREF_KEY_PIN);
        enableOrDisablePin.setOnPreferenceChangeListener(this);
        if (!enableOrDisablePin.isChecked()) {
            mCategory.removePreference(changePin);
        }
    }
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.preferences, rootKey);
    }
    @Override
    public boolean onPreferenceTreeClick(Preference preference) {
        if (preference.getKey().equals(MDSConstants.SETTINGS.PREF_KEY_CHANGE_PIN)) {
            Intent intent = new Intent(getActivity(), CustomPinActivity.class);
            intent.putExtra(AppLock.EXTRA_TYPE, AppLock.CHANGE_PIN);
            startActivity(intent);
        }
        return super.onPreferenceTreeClick(preference);
    }
    @Override
    public boolean onPreferenceChange(Preference pref, Object newValue) {
        Intent intent = new Intent(getActivity(), CustomPinActivity.class);
        if (pref.getKey().equals(MDSConstants.SETTINGS.PREF_KEY_PIN)) {
            boolean currentlyChecked = !(Boolean) newValue;
            if (currentlyChecked) {
                mCategory.removePreference(changePin);
                Intent enterPinIntent = new Intent(getActivity(), CustomPinActivity.class);
                enterPinIntent.putExtra(AppLock.EXTRA_TYPE, AppLock.UNLOCK_PIN);
                startActivityForResult(enterPinIntent, REQUEST_PIN_CODE_CHECK);
            } else {
                intent.putExtra(AppLock.EXTRA_TYPE, AppLock.ENABLE_PINLOCK);
                startActivityForResult(intent, REQUEST_PIN_CODE_ENABLE);
            }
        }
        return true;
    }
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_PIN_CODE_ENABLE && resultCode == Activity.RESULT_OK) {
                Toast.makeText(getActivity(), "PinCode enabled", Toast.LENGTH_SHORT).show();
                mCategory.addPreference(changePin);
        } else if (requestCode == REQUEST_PIN_CODE_CHECK ) {
            if (resultCode != Activity.RESULT_OK) {
                enableOrDisablePin.setChecked(true);
                if (mCategory.findPreference(MDSConstants.SETTINGS.PREF_KEY_PIN) != null) {
                    mCategory.addPreference(changePin);
                }
            }
        }
    }
/*    private void setPinSwitchEnabled(boolean enabled){
        pinSwitch.setOnCheckedChangeListener(null);
        pinSwitch.setChecked(enabled);
        pinSwitch.setOnCheckedChangeListener(this);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putBoolean(MDSConstants.SharedPreferences.PIN_ENABLED, enabled);
        editor.apply();}*/
}

我设法用baselifecyclehandler

解决了最小化的解决
package com.musala.imds.utils;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import com.github.orangegangsters.lollipin.lib.managers.AppLock;
import com.musala.imds.MyApplication;
import com.musala.imds.activities.CustomPinActivity;
import com.musala.imds.activities.SplashScreenActivity;
import javax.inject.Inject;
/**
 * Created by aleksandar.milushev on 21.12.2016 г..
 */
public class BaseLifecycleHandler implements Application.ActivityLifecycleCallbacks {
    private static final String TAG = BaseLifecycleHandler.class.getName();
    @Inject
    Context context;
    private SharedPreferences prefs;
    private static int resumed;
    private static int paused;
    private static int started;
    private static int stopped;
    public BaseLifecycleHandler() {
        MyApplication.getObjectGraph().inject(this);
        prefs = PreferenceManager.getDefaultSharedPreferences(context);
    }
    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
    }
    @Override
    public void onActivityDestroyed(Activity activity) {
    }
    @Override
    public void onActivityResumed(Activity activity) {
        ++resumed;
        if ((isPinCodeSet())
                && (isAppPreviousStateMinimized())
                && (activity instanceof CustomPinActivity) == false) {
            Log.d(TAG, "onActivityResumed and PIN required");
            Intent enterPinIntent = new Intent(activity, CustomPinActivity.class);
            enterPinIntent.putExtra(AppLock.EXTRA_TYPE, AppLock.UNLOCK_PIN);
            activity.startActivity(enterPinIntent);
        }
    }
    @Override
    public void onActivityPaused(Activity activity) {
        ++paused;
        if (activity instanceof SplashScreenActivity) {
            return;
        }
        setKeyAppPreviosStateMinimized(!isApplicationInForeground() && !isApplicationVisible());
    }
    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
    }
    @Override
    public void onActivityStarted(Activity activity) {
        ++started;
    }
    @Override
    public void onActivityStopped(Activity activity) {
        ++stopped;
        String classSimpleName = activity.getClass().getSimpleName();
        boolean isSplashScreen = classSimpleName.equals(SplashScreenActivity.class.getSimpleName());
        if (isSplashScreen) {
            return;
        }
        setKeyAppPreviosStateMinimized(!isApplicationInForeground() && !isApplicationVisible());
    }
    public static boolean isApplicationVisible() {
        return started > stopped;
    }
    public static boolean isApplicationInForeground() {
        return resumed > paused;
    }
    private void setKeyAppPreviosStateMinimized(boolean minimized){
        SharedPreferences.Editor editor = prefs.edit();
        editor.putBoolean(MDSConstants.SharedPreferences.APP_PREVIOUS_STATE_MINIMIZED, minimized);
        editor.commit();
    }
    private boolean isAppPreviousStateMinimized(){
        return prefs.getBoolean(MDSConstants.SharedPreferences.APP_PREVIOUS_STATE_MINIMIZED, false);
    }
    private boolean isPinCodeSet(){
        return prefs.getBoolean(MDSConstants.SETTINGS.PREF_KEY_PIN, false);
    }
}

但是,杀死应用程序时仍然有麻烦

最新更新