Всегда (никогда не убивал) видимый значок на экране в Android

Я хочу создать значок на экране, который просто прослушивает прикосновение к нему (без необходимости создавать бесполезное уведомление) после 3 дней поиска в Интернете и запросов в каналах IRC и реализации таких примеров, как этот:

Приложение для Android, которое работает поверх ВСЕХ других приложений?< /а>

Создание окна системного наложения (всегда сверху)

Я обнаружил, что есть хакерский способ сделать это, но никто об этом не знает (кроме разработчиков Smart Taskbar). даже не убивайте его с помощью обычного убийцы задач, такого как диспетчер задач Android), есть только один способ убить этот значок, перейдите в настройки> приложения> выберите умную панель задач> принудительно остановить.

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


person hosein    schedule 29.04.2014    source источник


Ответы (2)


Вызовите setupNotification() в методе onCreate службы и clearNotification() в методе onDestroy службы.

private int SERVICE_NOTIFICATION = 1; // this should be unique for your app

private void setupNotification()
{
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2){
        Notification serviceNotification = new NotificationCompat.Builder(this)
            .setContentTitle("Your Service")
            .setContentText("Your Service is running in the background")
            .setSmallIcon(R.drawable.ic_launcher)
            .setPriority(NotificationCompat.PRIORITY_MIN)
            .setOngoing(true)
            .build();
        startForeground(SERVICE_NOTIFICATION, serviceNotification);
    }
    else{
        Notification serviceNotification = new Notification();
        serviceNotification.flags = Notification.FLAG_ONGOING_EVENT;
        startForeground(SERVICE_NOTIFICATION, serviceNotification);
    }
}

private void clearNotification()
{
    stopForeground(true);
}
person Simon    schedule 04.05.2014
comment
извините, но это уведомление, но я сказал, что мне все равно не нужно бесполезное уведомление, как и ответ выше, это бесполезный ответ - person hosein; 04.05.2014
comment
Это именно то, что делает Smart Taskbar 2. Вы хоть пробовали? Это невидимое уведомление для менее чем APIv18. После этого у вас должно быть уведомление. - person Simon; 04.05.2014

Это абсолютно выполнимо. Вы должны поддерживать постоянно работающую службу. и при создании этой службы,

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

        customView= new MYCustomView(MyService.this);
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.TRANSLUCENT);
        params.gravity = Gravity.RIGHT | Gravity.TOP;
        WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        wm.addView(customView, params);
    }

Это поместит ваш взгляд на вершину всех соперников.

person Rahul    schedule 29.04.2014
comment
Вы когда-нибудь тестировали то, что вы публикуете, нет, вы должны создать уведомление для службы переднего плана, пожалуйста, внимательно прочитайте сообщение, оно переходит в фоновый режим и когда-нибудь останавливается - person hosein; 29.04.2014
comment
Я реализовал это в одном из своих проектов. Да, вам нужно будет сохранить уведомление для службы переднего плана, поскольку вы можете захотеть сохранить эту службу в рабочем состоянии. - person Rahul; 29.04.2014
comment
И чтобы перезапустить службу, если она будет убита, вам также может понадобиться startSticky(). - person Rahul; 29.04.2014
comment
Хорошо, я спросил, что делает разработчик смарт-панели задач (без уведомлений), поэтому ваш код в этом посте не имеет отношения к делу, - person hosein; 29.04.2014