5

私のJavaアプリケーションには、このコードがあります

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

Android 2.3(レベル10)用にビルドすると、 コンパイルして正常に動作します。しかし、 Android 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);

だから私はなぜこれが起こっているのか、そしてこのコードが何を意味するのか理解していませんか?

編集: いくつかの参照はこちら

携帯電話でアプリを実行すると、バージョンは android 4.0.3 です

アンドロイドの幼児に安全なアプリ

4

3 に答える 3

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

Androidのホームボタンを無効にするために使用されますが、

このセキュリティ上の欠陥は Android の新しいバージョンでは修正されているため、ICS やジェリー ビーンでは機能しません...!!

于 2012-10-15T07:07:43.927 に答える
4

私はこの問題を解決しました

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

super を呼び出す前に onCreate で。

 protected void onCreate(Bundle savedInstanceState) {

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

        super.onCreate(savedInstanceState);
}

サルドス デスデ メデジン

于 2013-11-14T18:26:01.030 に答える
2
@Override    
public void onWindowFocusChanged(boolean hasFocus) {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);    
    super.onWindowFocusChanged(hasFocus);
}

windowAttachedにも問題がありました。代わりに、windowFocusChangedを使用してみてください。

于 2012-09-24T07:02:56.743 に答える