Java 服务背景

Java 服务背景,java,android,xml,service,Java,Android,Xml,Service,代码 我已经将主布局背景设置为空,但它仍然存在。。。比如我该如何移除它。。。这意味着我有这项服务,当我开始这项服务,这项活动将膨胀。。。但我只希望按钮充气,而不是整个活动。。。我该如何实现这一点呢 public class FloatingWindow extends Service{ WindowManager wm; RelativeLayout ll; LayoutInflater li; @Override public IBinder onBind(Intent intent) {

代码


我已经将主布局背景设置为空,但它仍然存在。。。比如我该如何移除它。。。这意味着我有这项服务,当我开始这项服务,这项活动将膨胀。。。但我只希望按钮充气,而不是整个活动。。。我该如何实现这一点呢

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();
}
<?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>
不设置浮动活动的方向。因为它会导致Oreo设备崩溃

输出

更新

从服务中清除顶层堆栈,开始您的活动

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

如果您想在android屏幕上添加任何覆盖,请在清单中添加
SYSTEM\u ALERT\u WINDOW

    Intent intent1 = new Intent(this, MainActivity.class);
    intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent1);
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

只需将其添加到您的清单中即可

    Intent intent1 = new Intent(this, MainActivity.class);
    intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent1);
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
到您的根元素

尝试此解决方案

manifest
中添加此

android:background="@android:color/transparent" 
 private static final int CODE_DRAW_OVER_OTHER_APP_PERMISSION = 2084;
onCreate()
中添加此

android:background="@android:color/transparent" 
 private static final int CODE_DRAW_OVER_OTHER_APP_PERMISSION = 2084;
处理请求权限

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();
        }
然后启动您的
服务
,并在
服务
课程中执行此操作,检查下面的链接并分别执行您的操作

编辑答案,在主题上尝试
parent=“Theme.AppCompat.NoActionBar”
。这在任何情况下都不会起作用,他只想显示一些使用服务类的小部件,而服务类不是活动类,您要求将样式设置为活动类,该活动类被视为服务类,而服务类肯定不会work@Quicklearner您是否从服务中膨胀过布局,它是通过活动或对话框完成的。因此,这个解决方案将起作用。PO正在从服务开始活动。@Quicklearner请告诉我一种方法,在不使用对话框/活动的情况下从服务类显示一些布局,也许我没有了解到。背景为空,是的,这很好。。。但是我不能点击背景中的任何东西,因为活动仍然存在于顶部。。。只是颜色是透明的只是在这里发布你的服务类,我会帮你:)请在这里发布适当的代码,以便很快为你的问题找到有效的解决方案:)查看编辑后的问题,请@QuickLearner当前的行为是什么,你能用它添加一个屏幕截图吗@快速学习者如果不麻烦的话,再问一个问题。。。我可以添加一个像。。。当我触摸屏幕时,服务应该打开,只要我的手指触摸屏幕,服务就应该打开,一旦我离开屏幕,服务就应该停止???我想你的意思是,只要用户触摸屏幕,你就想显示弹出窗口,然后再次使其不可见?是的。。。有没有一种方法我可以做到这一点据我说,你可以在你的应用程序只,像玩触摸,触摸等,而不是当应用程序是在后台,我不确定是诚实的,等等,我会为你检查它