Androidのディスプレイの最前面に常に表示されるアクティビティを作成できるようにしたいと考えています。入力を受け取る必要はなく、その下にある次のアプリケーションに渡すだけです。HUDのようなもの。
基になるウィンドウ タイプを TYPE_SYSTEM_ALERT に設定する必要があることを調査できましたが、Android が私のコードを無視しているようです。マニフェストから android.permission.SYSTEM_ALERT_WINDOW パーミッションを削除しても例外はスローされません。(このウィンドウ タイプを使用する必要があります)。ダイアログで ALERT タイプを使用しようとすると、うまくいきましたが、ダイアログを全画面の透過エンティティにすることはできません。これが私のコードです。単純な何かが欠けている可能性があります。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.main);
}
半透明の設定は、xml マニフェストで外部的に有効にする必要があります。そうしないと、機能しませんでした。
<item name="android:windowIsTranslucent">true</item>