2013-07-29 4 views
7

In meiner Anwendung muss ich Telefon sperren und entsperren. Ich habe danach gesucht, viele Antworten gefunden, ich habe sie ausprobiert, aber keiner arbeitet.Telefon programmgesteuert sperren/entsperren: Android

Ich muss Telefon auf onCreate() entsperren und Telefon wieder sperren, während ich meine Tätigkeit beende.

Wissen Sie irgendeine Methode, um das Gleiche zu tun?

Danke Freunde.

EDIT:

Einige Links, dass ich versucht habe, sind:

How to display Activity when the screen is locked?

Android screen lock/ unlock programmatically

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

In meiner Anwendung, die ich planen, eine Aufgabe mit AlarmManager und die n Aktivieren der Telefonsperre. Meine Aktivität wird zur geplanten Zeit gestartet, aber mein Telefon wird nicht entsperrt. wenn ich mein Handy manuell entriegeln Laufaktivität

+1

dem Sie versuchen, haben Antworten zu so kennen wir sie nicht vorschlagen? – CodingIntrigue

+1

"niemand arbeitet" ist keine nützliche Beschreibung Ihrer Symptome. Bitte erläutern Sie * vollständig und genau * was Sie ausprobiert haben und welche Probleme aufgetreten sind. – CommonsWare

+0

@BladeOrz: Ich habe einige der besuchten Seiten hinzugefügt Links –

Antwort

8

auf BroadcastReceiver die wakelock und in den activity

Tun Sie dies ein:

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

nach

importieren
import android.view.Window; 
import android.view.WindowManager.LayoutParams; 

es mein Problem gelöst, bewerten es oben :-)))

+0

Dies scheint irgendwie zu funktionieren, und meine Anwendung wird nach vorne gebracht .... Event obwohl keine SIM-Karte Pin eingegeben wurde. Ich denke nur irgendwie, dass Sie nicht auf alle Telefon- oder Datenfunktionen zugreifen können. Ich werde Sie wissen lassen, ob das der Fall ist ... – 130nk3r5

+0

Jip, bestätigt. Sie haben also keinen Zugriff auf die SIM-Karten-Funktionalität. Wenn Sie also die PIN umgehen und Ihre App starten möchten, funktioniert das großartig ... solange der Benutzer die App nicht minimiert oder schließt, weil Sie dann wieder auf dem Anmeldebildschirm sind. – 130nk3r5

+0

Sooo einfach! und funktioniert gut –

-1

dies erscheint immer versuchen ...

@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; 

hinzufügen Code in onCreate()

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

fügen Sie Code in Manifest-Datei

<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> 

Erstellen Sie eine XML-Ressourcendatei in res/xml als device_admin_sample.xml, und fügen Sie Folgendes hinzu:

<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> 

Add Berechtigungen in Manifest-Datei -

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

einen Empfänger Klasse erstellen, die DeviceAdminReceiver-Klasse erweitert.

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) { 
} 

}

fragen aktivieren Sperre Erlaubnis in Aktivitätsklasse

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); 

Scheck Erlaubnis erteilt wird oder nicht

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

Entriegelungssystem

deviceManger.removeActiveAdmin(compName); 

Um

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

Schalte Ab API 27 wurden FLAG_SHOW_WHEN_LOCKED und FLAG_TURN_SCREEN_ON veraltet. verwenden Sie diese stattdessen in der Manifest

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

Oder für den allgemeinen Gebrauch, in Ihrer Aktivität:

@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); 
    } 
}