5

Androidアプリケーションの上に常にオーバーレイウィンドウを描画する方法はありますか?

私はAndroidx86ポートを使用しており、システム権限を持っています。

@編集:オーバーレイの下のビューは、すべてのイベントを受信する必要があります。

4

2 に答える 2

9

Service現在のビューを追加するを作成することでそれを行うことが可能ですWindowManager

public class OverlayService extends Service {

    @Override
    public void onCreate() {
        super.onCreate();

        WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

        View overlay = /* create your overlay here */;

        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
            PixelFormat.TRANSLUCENT);
        windowManager.addView(overlay , params);
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }   
}

ただし、次の追加の許可が必要です。

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

そして、マニフェストにサービスを登録するだけです。

<service android:name=".OverlayService" ></service>

そしてそれを開始します:

startService(new Intent(this, OverlayService.class));
于 2012-11-12T15:20:47.140 に答える
0

このメソッドaddWatermarkWithinApplicationLifecycle()を削除するだけで、私のライブラリを使用できます。これにより、オーバーレイがアプリのライフサイクルに固定されます(電話アプリ全体にオーバーレイを表示したい場合)。これらの権限を追加することも忘れないでください-

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"  />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
<uses-permission android:name="android.permission.ACTION_MANAGE_OVERLAY_PERMISSION"/>

私のライブラリのgifプレビュー-

ここに画像の説明を入力してください

于 2020-09-15T04:11:31.580 に答える