मैं एक ऐसे एप्लिकेशन को विकसित कर रहा हूं, जब भी कोई उपयोगकर्ता ऐप छोड़ देता है और वापस आ जाता है (स्क्रीन लॉक के माध्यम से हो या वापस स्क्रीन के माध्यम से होम स्क्रीन पर जा रहा हो या होम बटन)। मैं इसे का उपयोग कर काम कर निम्नलिखित था:पता करें कि पासकोड लॉक कब दिखाना है
प्रारंभिक गतिविधि स्टार्टअप पर पासकोड जांच करने के लिए कहेंगे, और प्रत्येक गतिविधि उनके onPause विधि के लिए निम्न कार्यक्षमता कहा:
@Override
public void onPause() {
super.onPause();
if (!isFinishing()) {
new PasscodeCheckTask(this.getApplicationContext(),this).execute();
}
}
PassocdeCheckTask निम्नलिखित की तरह दिखता है। यह अगर स्क्रीन के बंद होने या एप्लिकेशन पृष्ठभूमि
public class PasscodeCheckTask extends AsyncTask<Void, Void, Boolean> {
public static final int CHECK_PASSCODE = 0;
private Context mActivityApplicationContext;
private Context mActivityContext;
public PasscodeCheckTask(Context applicationContext, Context activityContext){
mActivityApplicationContext = applicationContext;
mActivityContext = activityContext;
}
@Override
protected Boolean doInBackground(Void... params) {
Boolean result = false;
if (!((PowerManager)mActivityApplicationContext.getSystemService(android.content.Context.POWER_SERVICE)).isScreenOn() ||
!isAppOnForeground(mActivityApplicationContext)) {
result = true;
}
return result;
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
// Start passcode activity to check for passcode
/* CODE HERE */
((Activity)mActivityContext).startActivityForResult(intent, CHECK_PASSCODE);
}
}
protected boolean isAppOnForeground(final Context context) {
List<RunningAppProcessInfo> appProcesses = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)).getRunningAppProcesses();
if (appProcesses == null) {
return false;
}
final String packageName = context.getPackageName();
for (RunningAppProcessInfo appProcess : appProcesses) {
if ((appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) &&
appProcess.processName.equals(packageName)) {
return true;
}
}
return false;
}
}
जब किया पासकोड गतिविधि को ख़त्म कर में नहीं रह गया है, और बुला गतिविधि moveTaskToBackground (सही) पासकोड में सफल नहीं हुआ है, तो देखने के लिए जाँच करता है। जब तक मैंने इसे एचटीसी ईवो पर एमआईसीजी रोम के साथ करने की कोशिश नहीं की, तब तक यह प्रणाली खूबसूरती से काम करती रही। किसी कारण से, appProcess.importance IMPORTANCE_FOREGROUND के रूप में कभी नहीं दिखाया गया। यह हमेशा IMPORTANCE_BACKGROUND था। इस प्रकार, पासकोड हमेशा लाया जाएगा, भले ही ऐप पृष्ठभूमि में कभी नहीं चला।
मैंने उस फोन पर ड्रॉपबॉक्स को आजमाया (जिसमें पासकोड लॉक भी है), और यह खूबसूरती से काम करता है। जब पृष्ठभूमि में कोई ऐप चला गया है, या पृष्ठभूमि से वापस लाया जा रहा है, तो मुझे यह जानने का एक अलग तरीका नहीं दिख रहा है। इस काम को कैसे बनाया जाए इस पर कोई विचार?
आप वास्तव में कुछ इस तरह करने की जरूरत नहीं होनी चाहिए। यदि आपका उपयोगकर्ता आपके ऐप का उपयोग करते समय अपने फोन को लॉक करता है तो क्या होगा? फिर उन्हें अपनी लॉकस्क्रीन, और फिर अपनी लॉकस्क्रीन करना होगा। मैं इसके लिए दंडित हो सकता हूं, लेकिन एंड्रॉइड लॉक स्क्रीन पर्याप्त है। यदि आप कुछ इतना महत्वपूर्ण कर रहे हैं कि आपको अपनी लॉक स्क्रीन की आवश्यकता है, तो शायद आपको इसे फोन पर भी पुनर्विचार करना चाहिए। –
यह आवश्यक है और उपयोगकर्ता की निजी जानकारी से संबंधित है। मैं चिंता को समझता हूं, लेकिन इसके लिए एक पासकोड उपयोगी है। – Chewie
यह एक अजीब टिप्पणी @ KurtisNusbaum की तरह है। मैं अपने फोन पर ड्रॉपबॉक्स का उपयोग करता हूं, और मेरे पास बहुत संवेदनशील संवेदनशील जानकारी संग्रहीत है। जैसा कि मुझे लगता है कि अधिकांश ड्रॉपबॉक्स खाते हैं। जब आप कहते हैं कि ऐसे ऐप्स को पासवर्ड से सुरक्षित रखना अच्छा नहीं है तो आप वास्तव में गंभीर नहीं हो सकते हैं। ऐसे कई मामले हैं जब पासवर्ड एक बहुत ही बुद्धिमान विचार है, यदि अनिवार्य नहीं है, तो कोई भी बहस कर सकता है। मुझे लगता है कि गैलरी ऐप में पासवर्ड होना चाहिए, मैं अपनी गोपनीयता पर बहुत उत्सुक हूं, और लोग एक दूसरे के फोन के साथ खेलना चाहते हैं। – slinden77