Всегда (никогда не убитый) видимый значок над экраном в Android
Я хочу создать иконку на экране, чтобы просто прослушивать прикосновения к ней (без необходимости создавать бесполезные уведомления) после 3-х дней поиска по сети и запроса в каналах IRC и реализации таких примеров:
Android-приложение, которое работает поверх ВСЕХ других приложений?
Создание системного оверлея (всегда сверху)
я обнаружил, что есть хакерский способ сделать это, но никто не знает его (кроме разработчиков Smart Taskbar). Я устанавливаю Smart Taskbar с большинством исходных примеров и обнаружил, что эти примеры убиты без панели уведомлений, но smart Taskbar никогда не убивал (я обнаружил, что вы можете даже не убить его с помощью обычного убийцы задач, как Android Task Manager), есть только один способ убить этот значок, перейдите в настройки> приложения> выберите умную панель задач>Force stop.
Еще одна вещь, которую я обнаружил, это то, что она никогда не переходит в фоновый режим, а в диспетчере задач Android (в списке процессов в реальном времени) она помечается как видимая, и вы не можете убить ее. Кто-то может мне помочь, как я могу создать иконку, которая всегда видна и никогда не убивал на экране
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);
}
Это абсолютно выполнимо. Вы должны поддерживать постоянно работающий сервис. и в создании этого сервиса,
@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);
}
Это поместит ваш взгляд поверх всех соперников.