5

我創建一個鎖屏應用程序,我需要禁用一個主頁按鈕,所以如果該手機被盜,該手機無法訪問..我的鎖屏是一個全屏活動..即時通訊使用此代碼來禁用主頁按鈕,但它給了我一些錯誤。下面的代碼:如何在不使用TYPE_KEYGUARD的情況下禁用主頁按鈕?

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

    } 

    @Override 
    public void onAttachedToWindow() 
    { 
     this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);  
     super.onAttachedToWindow(); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     return false; 
    } 

代碼給了我一些bug一樣仍然可以訪問,即使我在全屏模式下的活動,如果我再次..在關掉我的顯示器並打開它的通知/狀態區錯誤是這樣的:

首次啓動應用程序:(仍然沒有問題)

enter image description here

我從電源按鈕關閉後我的屏幕,並再次打開: enter image description here

的主要問題是在鎖定屏幕上。當通知區域仍然可以訪問,那麼,鎖屏是沒有用的..

任何想法如何解決這個問題?請幫助..

我也面臨同樣的問題,當我按結束鍵按鈕。

回答

4

我的電話TYPE_KEYGUARD似乎覆蓋全屏,沒有標題欄的主題。通知欄始終存在。試試這個:

@Override 
public void onAttachedToWindow() 
{ 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);  
    super.onAttachedToWindow(); 
} 

讓你的視圖伸展整個屏幕,它會掩蓋通知區域。您的通知區域可能仍然是可點擊的(不可見的),但我相信,如果您捕捉到視圖中的所有關鍵事件,它不應該傳播到酒吧。

+0

你好@e_x_p我也面臨同樣的問題你的解決方案在按下結束按鈕後也不起作用按下結束按鈕之後,通知區域再次可見 –

+0

This – AndroidDev

+1

TYPE_KEYGUARD在SDK 14以上的版本中已被棄用。它在目標ADK版本21中完全不起作用。 –

0

您無法控制Home Button的行爲。它會完成它的任務,你需要調整你的應用程序需求。

爲全屏顯示在您的活動代碼在你的manifest文件添加此:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
+0

我可以與此禁用主頁按鈕:@覆蓋 公共無效onAttachedToWindow() { this.getWindow()的setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); }但它給了我像上面的圖片一些錯誤..任何想法? –

+0

感謝您的答案..我已經添加該代碼已經爲全屏活動,但問題是,當我關閉我的屏幕,並再次打開它,它會給我像上面的圖片一些錯誤.. :( –

+0

您好邁克爾....你確定上面的代碼你提供可以禁用主頁按鈕..科斯我使用相同的代碼,但主頁按鈕沒有禁用....你可以幫我嗎? – user632905

1

這是非常簡單的,你應該在onAttachedToWindow禁用鍵盤鎖()方法:

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 
lock.disableKeyguard(); 
+0

其工作正常...... –

1

試試這個代碼:

@Override 
public void onAttachedToWindow() { 
    // TODO Auto-generated method stub 
    super.onAttachedToWindow(); 

    handler.postDelayed(mUpdateUiMsg, 100); 

} 


public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // TODO Auto-generated method stub 
    if(keyCode==KeyEvent.KEYCODE_BACK){ 
    return true; 
    } 
    if(keyCode==KeyEvent.KEYCODE_HOME){ 
    return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 


private Runnable mUpdateUiMsg = new Runnable() { 
     public void run() { 


      getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 


     } 
    }; 
4

這是上述問題的工作..

@Override 
public void onAttachedToWindow() { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 
    KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
    KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 
    lock.disableKeyguard(); 
    } 

添加android.permission.DISABLE_KEYGUARD權限並給android:theme="@android:style/Theme.NoTitleBar.Fullscreen"至應用程序

+0

KeyguardLock已棄用!有什麼選擇? – IronBlossom

2

在我的Samusung口袋裏,上面沒有任何工作正常。經過進一步的搜索,我終於可以做到了。

我把它們全屏放在你的AndroidMainfest中。XML像以下(不胡亞蓉代碼):

<activity 
    android:name=".geo.activity.LockActivity" 
    android:theme = "@android:style/Theme.Black.NoTitleBar.Fullscreen" /> 

而且使用keygurad onAttachedToWindow()方法,在你的活動:

@Override 
public void onAttachedToWindow() { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 
    KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
    KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 
    lock.disableKeyguard(); 
} 

正是我一直想。關閉/打開後阻止HOME按鈕。

1

對於鎖屏你爲什麼不只是使用下列內容:

@Override 
public void onAttachedToWindow() { 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
} 

如果用戶沒有一個安全的鎖屏設置,應用程序就會轉到主屏幕時,您的應用程序關閉。如果用戶確實擁有安全的鎖屏設置,那麼無論您的應用如何關閉,標準安全鎖屏都會出現。我想我不會擔心禁用按鈕。用戶應該被允許使用標準的安全功能,因爲它們提供了更多的安全性,然後你可以通過你的應用程序來保證。此外,您不必花時間編碼安全解鎖功能。

1
 @Override 
    public boolean onKeyDown(int keyCode, android.view.KeyEvent event) { 
     if((keyCode == KeyEvent.KEYCODE_HOME)){  
     return true; 
     } 
     return false; 
    } 
+0

它不適合我。 – sandeepmaaram

+0

正常活動不能截取家庭鑰匙。重寫此方法並不能解決任何問題。 – robert

相關問題