1. ホーム
  2. アンドロイド

[解決済み】他のアプリ(FacebookのChat Headsなど)の上に描画するためのAPIは何ですか?)

2022-04-05 17:26:14

質問

FacebookはAndroidでどのようにチャットヘッドを作成しているのですか?他のすべてのビューの上にフローティングビューを作成するためのAPIは何ですか?

どのように解決するのですか?

これは の1つです。

アプリケーションでウィンドウを開く際に、タイプ TYPE_SYSTEM_ALERTは、他のすべてのアプリケーションの一番上に表示されます。 このパーミッションを使用すべきアプリケーションはほとんどありません。 システムレベルでのユーザーとの対話のために

定数値: "android.permission.SYSTEM_ALERT_WINDOW"。

//EDIT。 全コード こちら :

public class ChatHeadService extends Service {

  private WindowManager windowManager;
  private ImageView chatHead;

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

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

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

    chatHead = new ImageView(this);
    chatHead.setImageResource(R.drawable.android_head);

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_PHONE,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.TOP | Gravity.LEFT;
    params.x = 0;
    params.y = 100;

    windowManager.addView(chatHead, params);
  }

  @Override
  public void onDestroy() {
    super.onDestroy();
    if (chatHead != null) windowManager.removeView(chatHead);
  }
}

何らかの方法でサービスを開始することを忘れないでください。

startService(new Intent(context, ChatHeadService.class));

.. そして、このサービスをManifestに追加します。