Newer
Older
NotifyInfo / notifyApp3 / app / src / main / java / me / notify / notifyinfo3 / MainActivity.java
bello on 29 Oct 2019 4 KB notify3
package me.notify.notifyinfo3;

import android.content.Context;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;

import java.util.Date;

import cn.jpush.android.api.JPushInterface;

public class MainActivity extends AppCompatActivity {
    private String TAG = MainActivity.class.getName();
    private WindowManager wm;
    private WindowManager.LayoutParams params;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (!Settings.canDrawOverlays(this)){
                Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
                intent.setData(Uri.parse("package:" + getPackageName()));
                startActivityForResult(intent, 0);
            } else {
                startFloat();
            }
        } else {
            startFloat();
        }

        Log.e(TAG, "Registration ==> " + JPushInterface.getRegistrationID(this));

        ServerHelper.getInstance().getBaseUrl(JPushInterface.getRegistrationID(this), new ServerHelper.Callback() {
            @Override
            public void onListener(String result) {
            }
        });

//        finish();
    }


    void startFloat(){

        final View floatView = LayoutInflater.from(this).inflate(R.layout.ly_float, null);

        wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
        if (null != wm) {
            DisplayMetrics metrics = new DisplayMetrics();
            wm.getDefaultDisplay().getMetrics(metrics);
            int width = metrics.widthPixels;
            int height = metrics.heightPixels;

            params = new WindowManager.LayoutParams();
            params.width = 130;
            params.height = 130;

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
            } else {
                params.type = WindowManager.LayoutParams.TYPE_PHONE;
            }

            params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                    | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;

            params.gravity = Gravity.START | Gravity.TOP;

            params.format = PixelFormat.TRANSLUCENT;
            params.x = width;
            params.y = height / 2;

            wm.addView(floatView, params);
        }

        // 拖动
        floatView.setOnTouchListener(new View.OnTouchListener() {

            private int lastY;
            private int lastX;

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int rawX = (int) event.getRawX();
                int rawY = (int) event.getRawY();
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        lastX = (int) event.getRawX();
                        lastY = (int) event.getRawY();
                        break;

                    case MotionEvent.ACTION_MOVE:
                        params.x += rawX - lastX;
                        params.y += rawY - lastY;
                        lastX = rawX;
                        lastY = rawY;
                        wm.updateViewLayout(floatView, params);
                        break;
                    case MotionEvent.ACTION_UP:

                        break;
                }
                return false;
            }
        });


        // 双击退出
        final long[] preTime = {0};
        floatView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                long nowTime = new Date().getTime();
                if (nowTime - preTime[0] < 500) {
                    wm.removeView(v);
                } else {
                    preTime[0] = nowTime;
                }
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case 0:
                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return;
                startFloat();
                break;
        }
    }

}