Android 在安卓系统中,屏幕上始终(从未停止)可见图标

Android 在安卓系统中,屏幕上始终(从未停止)可见图标,android,android-layout,always-on-top,Android,Android Layout,Always On Top,我想在屏幕上创建一个图标,只需监听触摸即可(无需强制创建无用的通知) 3天后,通过网络搜索并在IRC渠道询问,并实施以下示例: 我发现有一种黑客方法可以做到这一点,但没有人知道(除了智能任务栏开发人员) 我用大多数源代码示例安装了Smart Taskbar,发现这些示例在没有通知栏的情况下被禁用,但Smart Taskbar从未被禁用(我发现你甚至不能用常规的task killer(如Android task Manager)将其禁用),只有一种方法可以禁用此图标,进入设置>应用程序>选择S

我想在屏幕上创建一个图标,只需监听触摸即可(无需强制创建无用的通知) 3天后,通过网络搜索并在IRC渠道询问,并实施以下示例:

我发现有一种黑客方法可以做到这一点,但没有人知道(除了智能任务栏开发人员) 我用大多数源代码示例安装了Smart Taskbar,发现这些示例在没有通知栏的情况下被禁用,但Smart Taskbar从未被禁用(我发现你甚至不能用常规的task killer(如Android task Manager)将其禁用),只有一种方法可以禁用此图标,进入设置>应用程序>选择Smart Taskbar>强制停止

我发现的另一件事是,它从不进入后台,在android任务管理器(在实时进程列表中)中,它被标记为可见,您无法杀死它
有人能帮助我如何创建一个始终可见且不会在屏幕上消失的图标吗?这是绝对可行的。您应该保持一个始终运行的服务。 在创建该服务时

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

这将使您的视图位于所有VIE之上。

在您的服务的
onCreate
方法中调用
setupNotification()
,在您的服务的
onDestroy
方法中调用
clearNotification()

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

你们有并没有测试过你们发布的内容,并没有,你们必须为前台服务创建通知,请仔细阅读这篇文章,它会转到后台并在某个时候停止。我在我的一个项目中实现了这一点。是的,您需要为前台服务保留一个通知,因为您可能希望保持该服务的有效性,并且为了在该服务被终止时重新启动该服务,您可能还需要startSticky()。好的,我询问了smart taskbar developer的功能(无通知),因此您在本文中的代码与此无关,抱歉,但这会发出通知,但我说的是我不需要无用的通知,就像上面的回答,这不是有用的响应这正是智能任务栏2所做的。你试过了吗?这是少于APIv18的不可见通知。之后,你必须得到通知。