美文网首页
Android 8 悬浮窗 简单使用

Android 8 悬浮窗 简单使用

作者: 梧叶已秋声 | 来源:发表于2019-12-22 09:59 被阅读0次

首先,在AndroidManifest.xml加入权限。
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

public class MainActivity extends AppCompatActivity{
    private WindowManager mWindowManager;
    private  WindowManager.LayoutParams layoutParams;

    private Button button1;
    private Button button2;

    private LinearLayout linearLayout;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //检查是否已经授予权限
        if (!Settings.canDrawOverlays(this)) {
            //若未授权则请求权限
            getOverlayPermission();
        }

        mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);

        linearLayout = new LinearLayout(getBaseContext());
        linearLayout.setOrientation(LinearLayout.VERTICAL);

        layoutParams = new WindowManager.LayoutParams();
        layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
        layoutParams.gravity = Gravity.BOTTOM;
        layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
        layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;


        button1 = new Button(getBaseContext());
        button1.setText("test1");
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               mWindowManager.removeView(linearLayout);
            }
        });
        button2 = new Button(getBaseContext());
        button2.setText("test2");
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mWindowManager.removeView(linearLayout);
            }
        });
        linearLayout.addView(button1);
        linearLayout.addView(button2);

        mWindowManager.addView(linearLayout,layoutParams);
    }
    //请求悬浮窗权限
    private void getOverlayPermission() {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
        intent.setData(Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, 0);
    }

}

Android 8中layoutParams.type 只能设成WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,因为源码中做了限制否则会报错。

相关文章

网友评论

      本文标题:Android 8 悬浮窗 简单使用

      本文链接:https://www.haomeiwen.com/subject/qpdgnctx.html