Подтвердить что ты не робот

Как реализовать всплывающее оверлей, которое можно отобразить на любом другом приложении в Android

Как я могу реализовать всплывающее оверлей для приложения, которое может отображаться через любое другое приложение.

Facebook реализовал очень похожую функцию под названием Chatheads в новой версии Facebook Messenger. Я был очень удивлен, увидев, что это возможно. На изображении вы видите чат (собаку справа) над другим приложением.

Facebook Messanger's Chathead over other app

4b9b3361

Ответ 1

Полный исходный код находится здесь: http://www.piwai.info/chatheads-basics
Примечание: Вам понадобится <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

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);
  }
}

Ответ 2

Это - это минимальный, простой и общий пример плавающей надстройки "chathead".

Он использует следующий код, чтобы сделать вещи float:

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
chatHead = new ImageView(this);
chatHead.setImageResource(R.drawable.floating);
final 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);

Полный источник источника можно найти здесь (по лицензии Apache).

Ответ 3

Я знаю, что поздно, чтобы опубликовать ответ, я все равно отправлю его другим людям, которые ищут ответ

AndroidFloatingImage

Ответ 4

Там есть библиотека для этого, если вы хотите, чтобы поведение Messenger было таким: Bubbles.

Если вы предпочитаете реализовать его, посмотрите на Window Manager, как предлагают другие. Вы можете также взглянуть на исходный код Bubbles, чтобы получить вдохновение.

Ответ 5

Каждое действие, диалог, а также сервис привязаны к окну. Facebook поддерживает службу, выполняемую в фоновом режиме, и в службе они получают объект оконного менеджера с помощью

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

Создать макет Параметры, необходимые при добавлении вида

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);

теперь добавьте свое представление в диспетчер окон следующим способом

windowManager.addView(yourView, params);