2013-07-29 9 views
7

मेरे आवेदन में, मुझे फ़ोन लॉक और अनलॉक करने की आवश्यकता है। मैंने इसकी खोज की, मुझे कई जवाब मिले, मैंने कोशिश की लेकिन कोई भी काम नहीं कर रहा है।प्रोग्राम प्रोग्रामिक रूप से लॉक/अनलॉक कैसे करें: एंड्रॉइड

मुझे onCreate() पर फोन अनलॉक करने की आवश्यकता है और जब मैं अपनी गतिविधि समाप्त कर रहा हूं तो फ़ोन को फिर से लॉक करना होगा।

क्या आप लोग ऐसा करने के लिए कोई तरीका जानते हैं?

धन्यवाद दोस्तों।

संपादित करें:

कुछ लिंक है कि मैं कोशिश की है इस प्रकार हैं:

How to display Activity when the screen is locked?

Android screen lock/ unlock programmatically

https://groups.google.com/forum/#!topic/android-developers/BOLjJTMO4zE

अपने आवेदन में मैं का उपयोग कर एक काम का समय निर्धारण कर रहा हूँ AlarmManager और एन फोन लॉक सक्षम। मेरी गतिविधि निर्धारित समय पर शुरू हो रही है लेकिन यह मेरे फोन को अनलॉक नहीं कर रही है। जब मैं अपने फोन को अनलॉक कर रहा हूँ मैन्युअल रूप से चल रहा है गतिविधि दिखाई दिया हो रही है

+1

उत्तर देता है जो तुम इतनी कोशिश की थी हम उन्हें सुझाव देने के लिए नहीं पता? – CodingIntrigue

+1

"कोई भी काम नहीं कर रहा है" आपके लक्षणों का उपयोगी वर्णन नहीं है। कृपया पूरी तरह से और सटीक * आपने जो कोशिश की है और आपको किस समस्या का सामना करना पड़ा है उसे समझाएं। – CommonsWare

+0

@ ब्लेडऑर्ज़: मैंने कुछ विज़िट किए गए पेज लिंक जोड़े हैं –

उत्तर

8
BroadcastReceiver wakelock की स्थापना पर

और activity

में यह कार्य करें:

Window window = this.getWindow(); 
window.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD); 
window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
window.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON); 

के बाद आयात
import android.view.Window; 
import android.view.WindowManager.LayoutParams; 

यह मेरी समस्या हल, यह :-)) दर ऊपर)

+0

यह किसी भी तरह से काम करने लगता है, और मेरा आवेदन सामने लाया गया है .... घटना हालांकि कोई सिम कार्ड पिन दर्ज नहीं किया गया है। मैं किसी भी तरह सोचता हूं कि आप किसी भी फोन या डेटा क्षमताओं तक पहुंच नहीं पाएंगे। अगर यह मामला है तो मैं आपको बता दूंगा ... – 130nk3r5

+0

जिप, पुष्टि की। तो आपके पास सिम कार्ड कार्यक्षमता तक पहुंच नहीं होगी। इसलिए यदि आप पिन दर्ज करना और अपने ऐप को फायर करना चाहते हैं, तो यह बहुत अच्छा काम करता है ... जब तक कि उपयोगकर्ता ऐप को कम या बंद नहीं करता है, तब आप लॉगिन स्क्रीन पर वापस आ जाते हैं। – 130nk3r5

+0

सरल सरल! और अच्छा काम करता है –

-1

इस प्रयास करें ...

@Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
        setContentView(R.layout.activity_main); 
    } 

    @Override 
     protected void onPause() { 
      super.onPause(); 
      getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 


     } 
3
DevicePolicyManager deviceManger; 
ActivityManager activityManager; 
ComponentName compName; 

OnCreate() में कोड जोड़

deviceManger = (DevicePolicyManager)getSystemService(
      Context.DEVICE_POLICY_SERVICE); 
activityManager = (ActivityManager)getSystemService(
      Context.ACTIVITY_SERVICE); 
compName = new ComponentName(this, DeviceAdminLock.class); 

मैनिफ़ेस्ट फ़ाइल में कोड जोड़

<receiver android:name=".DeviceAdminLock" 
     android:permission="android.permission.BIND_DEVICE_ADMIN"> 
     <meta-data android:name="android.app.device_admin" 
      android:resource="@xml/device_admin_sample" /> 
     <intent-filter> 
      <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 
     </intent-filter> 
</receiver> 

res_ xml में device_admin_sample.xml के रूप में एक XML संसाधन फ़ाइल बनाएँ और निम्न जोड़ें -

<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> 
  <uses-policies> 
    <limit-password /> 
    <watch-login /> 
    <reset-password /> 
    <force-lock /> 
    <wipe-data /> 
    <expire-password /> 
    <encrypted-storage /> 
    <disable-camera /> 
  </uses-policies> 
मैनिफ़ेस्ट फ़ाइल में

जोड़ें अनुमतियां -

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> 
<uses-permission android:name="android.permission.WAKE_LOCK"/> 

एक रिसीवर वर्ग जो DeviceAdminReceiver वर्ग फैली बनाएँ।

public class DeviceAdminLock extends DeviceAdminReceiver { 

@Override 
public void onEnabled(Context context, Intent intent) { 
} 

@Override 
public CharSequence onDisableRequested(Context context, Intent intent) { 
    return "This is an optional message to warn the user about disabling."; 
} 

@Override 
public void onDisabled(Context context, Intent intent) { 
} 

@Override 
public void onPasswordChanged(Context context, Intent intent) { 
} 

@Override 
public void onPasswordFailed(Context context, Intent intent) { 
} 

@Override 
public void onPasswordSucceeded(Context context, Intent intent) { 
} 

}

पूछना गतिविधि कक्षा में ताला अनुमति को सक्रिय

Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,compName); 
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"Additional text explaining why this needs to be added."); 
startActivityForResult(intent, 1); 

जांच की अनुमति दी गई है या नहीं

boolean active = deviceManger.isAdminActive(compName); 
if (active) { 
// if available then lock 
    deviceManger.lockNow(); 
} 

अनलॉक डिवाइस

deviceManger.removeActiveAdmin(compName); 

KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
final KeyguardManager.KeyguardLock kl = km .newKeyguardLock("MyKeyguardLock"); 
kl.disableKeyguard(); 

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK 
           | PowerManager.ACQUIRE_CAUSES_WAKEUP 
           | PowerManager.ON_AFTER_RELEASE, "MyWakeLock"); 
wakeLock.acquire(); 
0

अनलॉक करने के लिए एपीआई 27, FLAG_SHOW_WHEN_LOCKED और FLAG_TURN_SCREEN_ON पदावनत कर रहे थे के रूप में। इसके बजाय अपनी गतिविधि में सामान्य उपयोग के लिए Manifest

<activity 
    android:name=".MyActivity" 
    android:turnScreenOn="true" 
    android:showWhenLocked="true"/> 

में इस का उपयोग या,:

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

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { 
     setTurnScreenOn(true); 
     setShowWhenLocked(true); 
    } else { 
     window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
     window.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON); 
    } 
} 
संबंधित मुद्दे