2014-02-12 6 views
5

Ich habe die Push-Benachrichtigung mit GCM implementiert und wenn ich die Benachrichtigung erhalte, möchte ich in einem Dialog anzeigen, für den ich einen benutzerdefinierten Dialog erstellt habe.Wie wird der Dialog angezeigt, auch wenn der Bildschirm gesperrt ist?

Nun möchte ich mein Dialogfeld angezeigt werden, auch wenn das Gerät gesperrt ist, ob ein Muster übereinstimmen oder PIN.

Ich habe folgende Versuche gemacht, aber kein positives Ergebnis.

public void onAttachedToWindow() { 
     Window window = getWindow(); 
     window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
       | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
       | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
       | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
    } 

und auch

public void onAttachedToWindow() { 
      Window window = getWindow(); 
      window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
        + WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
        + WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
        + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
     } 

Berechtigungen in manifest:

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

und fügte auch die

android:showOnLockScreen="true" 

für die Aktivität auf dem i werden wollen, wenn Bildschirm angezeigt ist gesperrt.

Bitte helfen.

+1

Haben Sie eine Lösung gefunden? –

Antwort

1

Sie sollten die KeyGuardManager verwenden, um das Gerät automatisch zu entsperren und dann Ihre Wake Lock zu erwerben.

KeyguardManager kgm = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE); 
boolean isKeyguardUp = kgm.inKeyguardRestrictedInputMode(); 
KeyguardLock kgl = kgm.newKeyguardLock("Your Activity/Service name"); 

if(isKeyguardUp){ 
kgl.disableKeyguard(); 
isKeyguardUp = false; 
} 

wl.acquire(); //use your wake lock once keyguard is down. 

sollten Sie diese Berechtigung hinzufügen

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

und diese

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

Ich habe gerade 2 min zurück probiert. Aber immer noch keine positive Antwort –

+0

Hallo Anchit, versuchen Sie dies http://stackoverflow.com/questions/18504795/android-dialog-over-lock-screen – Bigoloo

+0

Bereits getan :( –

3

Wie finden Sie manifestieren Show dialog with touch events over lockscreen in Android 2.3

Ich glaube nicht verknüpfen können Sie Dialog angezeigt werden, wenn das Gerät ist gesperrt, ohne Ihre Anwendung als Admin pr zu binden veraltete App programmatisch.

Sie müssen also Ihre Anwendung mit dem Geräteadministrator verbinden. Sie können Geräteverwaltungsbeispiel von https://github.com/marakana/DevicePolicyDemo herunterladen.

Nachdem die Anwendung über den Geräte-Administrator verbindlich, wenn Sie die Push-Benachrichtigung erste entsperren Gerät durch

DevicePolicyManager devicePolicyManager = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); 
    ComponentName demoDeviceAdmin = new ComponentName(context, DemoDeviceAdminReceiver.class); 
    devicePolicyManager.setMaximumTimeToLock(demoDeviceAdmin, 0); 

dann starten Sie Ihre Tätigkeit erhalten, in dem Sie anzeigen können Sie in onattach Fenster Dialog wie folgt

@Override 
public void onAttachedToWindow() 
{ 
    super.onAttachedToWindow(); 

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
      | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD 
      | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
      | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
    new AlertDialog.Builder(this).setMessage("Dialog Displaying").setNeutralButton("OK", new OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.dismiss(); 

     } 
    }).show(); 
} 

Bitte lassen Sie mich wissen, wenn es hilft.

Verwandte Themen