2014-02-12 81 views
5

我已經實現了推送通知使用GCM,當我收到通知我想要顯示在我創建了一個自定義對話框的對話框。即使屏幕鎖定,如何顯示對話框?

現在,我希望我的對話框出現,即使設備被鎖定,無論模式匹配還是PIN。

我做了以下嘗試,但沒有正面結果。

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

並且還

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

權限清單:要顯示

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

,並且還添加了

android:showOnLockScreen="true" 

用於向我想要的活性時屏幕被鎖住了。

請幫忙。

+1

您是否找到解決方案? –

回答

1

您應該使用KeyGuardManager自動解鎖設備,然後獲取您的Wake Lock。

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. 

你應該添加此權限體現

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

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

我只有2分鐘的時間嘗試過。但仍然沒有正面迴應 –

+0

嗨錨,試試這個http://stackoverflow.com/questions/18504795/android-dialog-over-lock-screen – Bigoloo

+0

已經完成:( –

3

作爲參考鏈接 Show dialog with touch events over lockscreen in Android 2.3

我不認爲你可以顯示對話框,當設備沒有綁定你的應用程序作爲管理員被鎖定以編程方式使用虛擬應用程序。

所以你必須綁定你的應用程序與設備管理員。您可以從https://github.com/marakana/DevicePolicyDemo下載設備管理員樣本。

一旦你收到推送通知首先由

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

解鎖裝置,然後啓動你的活動中,你可以顯示你在onattach窗口對話框這樣

@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(); 
} 
通過設備管理員綁定應用程序之後

請讓我知道它是否有幫助。

相關問題