• android 8.0 悬浮窗 最简demo


    MainActivity.java文件

    package com.example.performance;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Build;
    import android.os.Bundle;
    import android.provider.Settings;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    
    
    
    public class MainActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) 
        {
            if (Build.VERSION.SDK_INT >= 23) {
                if (Settings.canDrawOverlays(MainActivity.this)) {
    //                Intent intent = new Intent(MainActivity.this, FloatingService.class);
                    Toast.makeText(MainActivity.this,"已开启Toucher",Toast.LENGTH_SHORT).show();
    //                startService(intent);
    //                finish();
                } else {
                    //若没有权限,提示获取.
                    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
                    Toast.makeText(MainActivity.this,"需要取得权限以使用悬浮窗",Toast.LENGTH_SHORT).show();
                    startActivity(intent);
                }
            } else {
                //SDK在23以下,不用管.
    //            Intent intent = new Intent(MainActivity.this, FloatingService.class);
    //            startService(intent);
    //            finish();
                
            }
          setContentView(R.layout.activity_main);
          Button startFloatWindow=(Button) findViewById(R.id.btn_floatWindows);
          startFloatWindow.setOnClickListener(new OnClickListener() {
              @Override
              public void onClick(View v) {
                  Intent intent=new Intent(MainActivity.this, FloatingService.class);
                  startService(intent);
                  finish();
              }
          });
          super.onCreate(savedInstanceState);
        }
    }

      

    FloatingService.java 文件

    package com.example.performance;
    
    import android.annotation.SuppressLint;
    import android.app.Service;
    import android.content.Intent;
    import android.graphics.Color;
    import android.graphics.PixelFormat;
    import android.os.Build;
    import android.os.IBinder;
    import android.provider.Settings;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.WindowManager;
    import android.widget.Button;
    
    
    
    @SuppressLint({ "ShowToast", "ClickableViewAccessibility" })
    public class FloatingService extends Service {
    
    
        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }
        
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            
            showFloatingWindow();
            return super.onStartCommand(intent, flags, startId);
        }
    
    
    
    
        private void showFloatingWindow() {
            
            if (Settings.canDrawOverlays(this)) {
                // 获取WindowManager服务
                final WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
    
                // 新建悬浮窗控件
                final Button button = new Button(getApplicationContext());
                button.setText("Floating Window");
                button.setBackgroundColor(Color.BLUE);
    
                // 设置LayoutParam
                final WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
                } else {
                    layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
                }
                layoutParams.format = PixelFormat.RGBA_8888;
                layoutParams.width = 500;
                layoutParams.height = 100;
                layoutParams.x = 100;
                layoutParams.y = 300;
                layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
    
                // 将悬浮窗控件添加到WindowManager
                windowManager.addView(button, layoutParams);
                button.setOnTouchListener(new View.OnTouchListener(){
                    private int x;
                    private int y;
                    @Override
                    public boolean onTouch(View view, MotionEvent event) {
                    switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        x = (int) event.getRawX();
                        y = (int) event.getRawY();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        int nowX = (int) event.getRawX();
                        int nowY = (int) event.getRawY();
                        int movedX = nowX - x;
                        int movedY = nowY - y;
                        x = nowX;
                        y = nowY;
                        layoutParams.x = layoutParams.x + movedX;
                        layoutParams.y = layoutParams.y + movedY;
    
                        // 更新悬浮窗控件布局
                        windowManager.updateViewLayout(view, layoutParams);
                        break;
                    default:
                        break;
                        }
                        return false;
                    }
                });
            }
        }
        
    }
    View Code

      

    activity_main.xml 文件

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.performance"
        android:versionCode="1"
        android:versionName="1.0" >
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/>
        <uses-sdk
            android:minSdkVersion="26"
            android:targetSdkVersion="26" />
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <service android:name=".FloatingService"/>
        </application>
    
    </manifest>
    

    AndroidManifest.xml 文件

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.performance"
        android:versionCode="1"
        android:versionName="1.0" >
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/>
        <uses-sdk
            android:minSdkVersion="26"
            android:targetSdkVersion="26" />
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <service android:name=".FloatingService"/>
        </application>
    
    </manifest>
    

      

  • 相关阅读:
    Java输入输出流详解2
    Java输入输出流详解(转)
    java泛型
    E-R图学习笔记
    MongoDB工具
    MongoDB安装
    mongodb-参考其他
    mongodb学习笔记
    WebService学习笔记
    nutch笔记
  • 原文地址:https://www.cnblogs.com/liuliu-word/p/10315134.html
Copyright © 2020-2023  润新知