Опыт работы

Код

<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "match_parent"
android:background = "@null"
android:id = "@+id/relativelayout"
android:layout_height = "match_parent"
xmlns:app = "http://schemas.android.com/apk/res-auto">

<Button
    android:id = "@+id/button5"
    android:layout_width = "70dp"
    android:layout_height = "70dp"
    android:layout_centerVertical = "true"
    android:layout_marginEnd = "9dp"
    android:layout_toStartOf = "@+id/button12"
    android:background = "@drawable/service_button_background"
    android:text = "Akash" />

<Button
    android:id = "@+id/button6"
    android:layout_width = "70dp"
    android:layout_height = "70dp"
    android:layout_above = "@+id/button5"
    android:layout_alignStart = "@+id/button7"
    android:background = "@drawable/service_button_background"
    android:text = "Sanjana" />

<Button
    android:id = "@+id/button7"
    android:layout_width = "70dp"
    android:layout_height = "70dp"
    android:layout_alignStart = "@+id/button5"
    android:layout_below = "@+id/button5"
    android:layout_marginStart = "19dp"
    android:background = "@drawable/service_button_background"
    android:text = "Sahana" />

<Button
    android:id = "@+id/button12"
    android:layout_width = "70dp"
    android:layout_height = "70dp"
    android:layout_above = "@+id/button5"
    android:layout_alignParentEnd = "true"
    android:layout_marginBottom = "30dp"
    android:background = "@drawable/service_button_background"
    android:text = "Akash" />

<Button
    android:layout_width = "70dp"
    android:background = "@drawable/service_button_background"
    android:text = "Akash"
    android:layout_height = "70dp"
    android:layout_alignParentEnd = "true"
    android:layout_alignTop = "@+id/button7"
    android:layout_marginTop = "30dp"
    android:id = "@+id/button11" />

Код

public class FloatingWindow extends Service{
WindowManager wm;
RelativeLayout ll;
LayoutInflater li;

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();
    final View myview;
    li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
    wm = (WindowManager) getSystemService(WINDOW_SERVICE);


    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.TYPE_INPUT_METHOD |
            WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,// | WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            PixelFormat.TRANSLUCENT);

    /////////////////////////Another params


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

    params.gravity = Gravity.RIGHT | Gravity.CENTER;
    myview = li.inflate(R.layout.service_pie, null); // your layout here

    wm.addView(myview, params);
    params.x = 0;
    params.y = 0

}

@Override
public void onDestroy() {
    super.onDestroy();
    stopSelf();
}

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

просто разместите здесь свой класс обслуживания, я помогу с этим :)

Quick learner 17.09.2018 12:54

Пожалуйста, разместите здесь соответствующий код, чтобы в ближайшее время получить рабочее решение вашей проблемы :)

Quick learner 17.09.2018 13:22

Посмотрите отредактированный вопрос, пожалуйста, @Quicklearner

user10238140 17.09.2018 13:28

каково текущее поведение, можно ли добавить с ним снимок экрана?

Quick learner 17.09.2018 13:30
ibb.co/m9xxcK @Quicklearner
user10238140 17.09.2018 13:37

я опубликовал ответ

Quick learner 17.09.2018 13:42
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
101
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Создайте стиль на вашем styles.xml

<?xml version = "1.0" encoding = "utf-8"?>
<resources>
  <style name = "Theme.Transparent" parent = "Theme.AppCompat.NoActionBar">
    <item name = "android:windowIsTranslucent">true</item>
    <item name = "android:windowBackground">@android:color/transparent</item>
    <item name = "android:windowContentOverlay">@null</item>
    <item name = "android:windowNoTitle">true</item>
    <item name = "android:windowIsFloating">true</item>
    <item name = "android:backgroundDimEnabled">false</item>
  </style>
</resources>

Установите его в свой тег активности в manifest.xml

<activity android:name = ".YourActivity" android:theme = "@style/Theme.Transparent">
...
</activity>

Не устанавливайте ориентацию при плавании. Поскольку это вызовет сбой на устройствах Oreo.

Выход

output

Обновлять

Начните свою деятельность с чистого верхнего стека из службы.

    Intent intent1 = new Intent(this, MainActivity.class);
    intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent1);

Обновление 2

Если вы хотите поместить какое-либо наложение на экран Android, поместите SYSTEM_ALERT_WINDOW в манифест.

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

Отредактировал ответ, попробуйте parent = "Theme.AppCompat.NoActionBar" по теме.

Khemraj Sharma 17.09.2018 12:39

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

Quick learner 17.09.2018 12:53

@Quicklearner Вы когда-нибудь раздували макет из службы, это делается с помощью действия или диалогового окна. Так что это решение будет работать. Заказчик начинает деятельность из службы.

Khemraj Sharma 17.09.2018 12:56

@Quicklearner Из вопроса явно кажется, что он хочет надуть Activity (прозрачный) при запуске службы. А также как класс обслуживания будет иметь расположение?

Vir Rajpurohit 17.09.2018 12:57

Он хочет показать какой-нибудь виджет, используя класс обслуживания, а активность не будет работать как класс обслуживания @VirRajpurohit

Quick learner 17.09.2018 12:59

@Quicklearner Подскажите, пожалуйста, способ показать какой-нибудь макет из класса Service без использования Dialog / Activity, возможно, я этого не узнал.

Khemraj Sharma 17.09.2018 13:03

@MichelleKinsten Как вы показываете свой макет? Это действие или диалог?

Khemraj Sharma 17.09.2018 13:03

узнайте больше об этом SYSTEM_ALERT_WINDOW, вы получите лучший способ

Quick learner 17.09.2018 13:07

будет ли ваш код работать, когда запущено другое приложение?

Quick learner 17.09.2018 13:08

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

user10238140 17.09.2018 13:15

конечно, я жду, чтобы он опубликовал соответствующий код, и я здесь, чтобы научиться делиться знаниями, не указывая, если бы я этого хотел, я бы проголосовал за ваш ответ :)

Quick learner 17.09.2018 13:15

"фон пуст, и да, это нормально ... но я не могу щелкнуть что-либо в фоновом режиме, потому что активность все еще существует наверху ... только цвет прозрачный" Видите это, о чем я говорил, это не сработает ни на одном другом приложение или на главном экране, потому что активность запущена и использует всю область экрана :)

Quick learner 17.09.2018 13:16

"мы всегда игнорируем SYSTEM_ALERT_WINDOW, потому что это опасное разрешение. Также, когда это можно сделать с помощью Activity, почему мы добавляем опасное разрешение. И SYSTEM_ALERT_WINDOW не является классом, о котором я просил, поскольку мы делаем Dialog, о котором я уже сказал, что вы может отображать макет из службы с помощью Activity / Dialog »- это не неправильно или проблема с его использованием, приложение для обмена сообщениями Facebook использует системное предупреждение для отображения всплывающего окна чата. Просто к сведению :)

Quick learner 17.09.2018 13:19

В любом случае я загружу код в свой репозиторий git очень скоро для этого требования

Quick learner 17.09.2018 13:20

@Quicklearner Он хочет создать сервис плавающих виджетов, вы правы, @_Michelle видит это stackoverflow.com/a/4482868/6891563

Khemraj Sharma 17.09.2018 13:30

@MichelleKinsten см. Обновленный ответ. Пожалуйста, проверьте это также simpleifiedcoding.net/android-floating-widget-tutorial

Khemraj Sharma 17.09.2018 13:34

Просто добавьте это в свой манифест.

<activity
    android:name = ".YOUR_ACTIVITY"
    android:theme = "@android:style/Theme.Translucent.NoTitleBar" />

В дополнение к этому набору

android:background = "@android:color/transparent" 

к вашему корневому элементу

Ответ принят как подходящий

Попробуйте это решение

В manifest добавьте это

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

Затем в вашей пусковой установке или любом базовом действии добавьте эти разрешения

 private static final int CODE_DRAW_OVER_OTHER_APP_PERMISSION = 2084;

В onCreate() добавьте это

if (SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
            startActivityForResult(intent, CODE_DRAW_OVER_OTHER_APP_PERMISSION);
            //finish();
        }

Обработка разрешения запроса

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CODE_DRAW_OVER_OTHER_APP_PERMISSION) {
            if (SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
                startActivityForResult(intent, CODE_DRAW_OVER_OTHER_APP_PERMISSION);
            } else {
               // do stuff here 
            }
        }
    }

Затем запустите свой service и сделайте это в классе service, проверьте ссылку ниже и выполните свои действия соответственно https://medium.com/@kevalpatel2106/create-chat-heads-like-facebook-messenger-32f7f1a62064

Еще один вопрос, если это не проблема ... могу ли я добавить такую ​​функцию, как ... Служба должна открываться, когда я касаюсь экрана, и должна быть открыта, пока мой палец касается экрана, и должна останавливаться, когда я выхожу из нее ???

user10238140 17.09.2018 13:48

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

Quick learner 17.09.2018 13:53

даааа ... есть способ сделать это

user10238140 17.09.2018 13:54

по моему, вы можете сделать это только в своем приложении, например, играть с прикосновением, приземлением и т. д., а не когда приложение находится в фоновом режиме, я не уверен, что честно, подождите, я проверю это для вас

Quick learner 17.09.2018 13:55

Другие вопросы по теме