安卓悬浮窗

标签 android android-studio

我想做一个红色的叠加窗口。你可以在下面看到我的代码。当我点击按钮时,它什么也没做。问题出在哪儿?我怎样才能解决这个问题。请提出建议 谢谢!

public class MainActivity extends AppCompatActivity {
Button button;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button=findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainActivity.this, OverlayLayer.class);
            startService(intent);
        }
    });
}
}


public class OverlayLayer extends Service {

public IBinder onBind(Intent ıntent) {
    return null;
}
private LinearLayout mLayout;
private WindowManager mManager;


@Override
public void onCreate() {
    super.onCreate();
    mManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    mLayout = new LinearLayout(this);
    LinearLayout.LayoutParams mParams=new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.MATCH_PARENT);
    mLayout.setBackgroundColor(Color.rgb(255,255,0));
    mLayout.setLayoutParams(mParams);
    WindowManager.LayoutParams parameters=new WindowManager.LayoutParams(400,150,WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,PixelFormat.TRANSLUCENT);
    parameters.x=0;
    parameters.y=0;
    parameters.gravity = Gravity.CENTER;
    mManager.addView(mLayout,parameters);
   }
 }

最佳答案

首先将您的服务添加到 AndroidManifest 中,使其成为“静态”,因为它在您的 MainActivity.java 文件中:

<service android:name=".MainActivity$OverlayLayer"/>

//make class static
public static class OverlayLayer extends Service {
...
}

或者创建一个独立的(独立于 MainActivity)类,如 OverlayLayer.java 并将其添加到 list 文件中,如:

<service android:name=".OverlayLayer"/>

然后使用下面的代码在窗口中添加 View :

在窗口上添加 View 的标志取决于操作系统,因此以下代码将使其在每个操作系统上都能正常工作:

OverlayLayer 类中:

  @Override
        public void onCreate() {
            super.onCreate();
            mManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
            mLayout = new LinearLayout(this);
            LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT);
            mLayout.setBackgroundColor(Color.rgb(255, 255, 0));
            mLayout.setLayoutParams(mParams);


            addToWindow(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        }


        public void addToWindow(int LAYOUT_FLAG) {
            WindowManager.LayoutParams parameters = new WindowManager.LayoutParams(400, 150, LAYOUT_FLAG, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);
            parameters.x = 0;
            parameters.y = 0;
            parameters.gravity = Gravity.CENTER;
            try {

                mManager.addView(mLayout, parameters);

            } catch (Exception e) {

                if (LAYOUT_FLAG == WindowManager.LayoutParams.TYPE_SYSTEM_ALERT) {
                    addToWindow(WindowManager.LayoutParams.TYPE_TOAST);
                }
                if (LAYOUT_FLAG == WindowManager.LayoutParams.TYPE_TOAST) {
                    addToWindow(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
                }
                if (LAYOUT_FLAG == WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY) {
                    addToWindow(WindowManager.LayoutParams.TYPE_PHONE);
                }
            }
        }

关于安卓悬浮窗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49475117/

相关文章:

android - 在 Android Studio 中失败 [INSTALL_FAILED_OLDER_SDK]?

android - 从代码中获取android原始资源目录中的文件列表

android - fontFamily 属性不能通过 textAppearance 工作

android - Android Studio 1.5.1 中的文件资源管理器

java - 在 Android 上使用 Dagger2 进行依赖注入(inject)

android - 导入 com.google.android.gms.auth.api.Auth 的未解决引用

Android Studio 更新时会不断替换 studio.vmoptions

android - 关闭最近的应用程序按钮或清除列表?

java - 如何重用一个 Intent 并将其带到最前面?

android - 即使 Wi-Fi 可用,也可以使用 LTE(蜂窝网络)下载 HTTP 文件