2012-09-24 2 views
5

私はこのコードを持っているこの4行のJavaコードは、アンドロイドアプリケーションの意味は何ですか?私のJavaアプリケーションで

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

私はアンドロイド2.3(レベル10)のためにそれをビルドするときには、コンパイルし、正常に動作します。しかし、私はアンドロイド4.0(レベル15)のためにそれをビルドするとき、それは実行時にコンパイルし、私にクラッシュを与え、次のエラー

07-16 14:00:03.090: E/AndroidRuntime(29487): FATAL EXCEPTION: main 
07-16 14:00:03.090: E/AndroidRuntime(29487): java.lang.IllegalArgumentException: Window type can not be changed after the window is added. 

私は、この行をコメントしてビルドするとき、それは正常に動作していない問題..

//this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 

だから私はなぜこのおかげでこのコードは何を意味するのか分かりません。

編集: いくつかの参照が代わりにwindowFocusChangedを使ってみて、私もwindowAttachedといくつかの問題を抱えていたここ

when I run app on my phone.The version is android 4.0.3

toddler safe app on android

+0

あなたの活動は14その後、以下にブラックベリー –

+0

単に設定targetSDKでonDisplayのように前面に来るとき、それは単に意味します。その後、それは動作しますhttp://stackoverflow.com/a/32587231/3496570 – Nepster

答えて

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

は、Androidに無効にホームボタンに使用されているが、

このセキュリティ上の欠陥は、Androidの新しいバージョンで修正されました... !!

2
@Override  
public void onWindowFocusChanged(boolean hasFocus) { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);  
    super.onWindowFocusChanged(hasFocus); 
} 

です。それは、ICSとジェリービーンでは動作しません

+7

それは動作しません。 Android 4.1を搭載したgalaxy s3でテスト済み –

4

私はスーパーを呼び出す前のonCreateで

this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 

を入れて、この問題を解決してきました。

protected void onCreate(Bundle savedInstanceState) { 

     this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 

     super.onCreate(savedInstanceState); 
} 

Saludos desdeメデリン

関連する問題