5

おそらくビューなどを使用して、フォアグラウンドアプリがフルスクリーンかどうかをバックグラウンドサービスに検出させる方法があるかどうかを知りたいです。ステータスバーが非表示または非表示でないことを意味します。

ビューが表示されているかどうかを検出するために定数文字列を使用しているのではないかと考えていましたか? しかし、正確にはわかりません。ルートは、必要に応じてオプションです。

みんなありがとう!!

4

3 に答える 3

10

ブロードキャストレシーバーなどを使用するのはどうですか。それは理想的ですが、全画面リクエストに対するそのようなブロードキャストはありません。

これが私がやったことです。

目に見えないオーバーレイを作成しました。この目に見えないオーバーレイのサイズは 0 x 0 です :)

私はそれから使用しますView.getLocationOnScreen(int[]);

これは、x と y の座標の値を持つ int 配列を返します。次に、これらの座標をテストします (実際には y 値のみに焦点を当てます) 0 に等しい場合、現在表示可能なアクティビティは全画面表示です (画面の最も高い領域にあるため) ステータス バーが表示されている場合、ビューは (私のデバイスでは 50 ピクセル) で返されます。これは、ビューが画面の端から 50 ピクセルであることを意味します。

これらすべてをタイマーを持つサービスに配置し、タイマーが期限切れになると、場所を取得し、テストを実行し、必要なことを行います。画面がオフになると、タイマーはキャンセルされます。画面がオンになると、タイマーが再起動します。

CPUの使用率を確認したところ、System Tunerで0.0%と表示されていました。

于 2013-08-08T21:40:24.757 に答える
1

試しましたgetWindow().getAttributes().flagsか?

public static boolean fullScreen = (getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0;
public static boolean forceNotFullScreen = (getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN) != 0;
public static boolean actionbarVisible = getActionBar().isShowing();

参照:

if( MyActivity.fullScreen){
      // full screen
}
else{
     // not full screen
}
于 2013-08-05T01:55:13.630 に答える