• MIUI显示悬浮窗


    1. 使用悬浮框

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

    2. 具体实现

    package com.pandans.hnairexam;
    
    import com.pandans.sunshine.provider.SunShineDB.BookT;
    
    import android.app.Application;
    import android.content.Context;
    import android.graphics.PixelFormat;
    import android.util.DisplayMetrics;
    import android.view.Gravity;
    import android.view.WindowManager;
    import android.view.WindowManager.LayoutParams;
    
    public class ExamApplication extends Application {
    	private WindowManager.LayoutParams windowParams = null;
    
    	public WindowManager.LayoutParams getWindowParams() {
    		if (windowParams == null) {
    			createWindowParams();
    		}
    		return windowParams;
    	}
    
    	private WindowManager.LayoutParams createWindowParams() {
    		windowParams = new WindowManager.LayoutParams();
    		windowParams.type = WindowManager.LayoutParams.TYPE_PHONE;
    		windowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
    				| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
    				| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
    		windowParams.format = PixelFormat.TRANSLUCENT;
    		/*
    		 * 注意,flag的值可以为: 下面的flags属性的效果形同“锁定”。 悬浮窗不可触摸,不接受任何事件,同时不影响后面的事件响应。
    		 * LayoutParams.FLAG_NOT_TOUCH_MODAL 不影响后面的事件
    		 * LayoutParams.FLAG_NOT_FOCUSABLE 不可聚焦 LayoutParams.FLAG_NOT_TOUCHABLE
    		 * 不可触摸
    		 */
    		// 调整悬浮窗口至左上角,便于调整坐标
    		windowParams.gravity = Gravity.LEFT | Gravity.TOP;
    		// 以屏幕左上角为原点,设置x、y初始值
    		windowParams.x = 0;
    		windowParams.y = 0;
    
    		setDisplay(windowParams);
    		return windowParams;
    	}
    
    	/**
    	 * 拖动更改位置
    	 * 
    	 * @param x
    	 * @param y
    	 */
    	public void updateWindows(int x, int y) {
    		windowParams.y = y;
    		((WindowManager) getSystemService(WINDOW_SERVICE)).updateViewLayout(
    				mFloatView, windowParams);
    	}
    
    	public void setDisplay(WindowManager.LayoutParams params) {
    		DisplayMetrics dm = new DisplayMetrics();
    		((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay()
    				.getMetrics(dm);
    		params.width = LayoutParams.MATCH_PARENT;
    		params.height = (int) (dm.heightPixels * 0.4);
    		
    //		params.height = 200;
    	}
    
    	private PFloatView mFloatView;
    
    	public void createView(Context cnt) {
    		if (mFloatView == null) {
    			mFloatView = new PFloatView(cnt);
    			mFloatView.setSpinnerData(cnt, getContentResolver().query(
    					BookT.CONTENT_URI, null, null, null, null));
    			((WindowManager) getSystemService(WINDOW_SERVICE)).addView(
    					mFloatView, getWindowParams());
    		}
    	}
    
    	public void clearView() {
    		if (mFloatView != null) {
    			((WindowManager) getSystemService(WINDOW_SERVICE))
    					.removeView(mFloatView);
    			mFloatView = null;
    		}
    	}
    
    }
    

      

    实际使用过程中发现miui的机器无法弹出悬浮窗,经查证,小米有做个权限,默认悬浮窗都不能弹出。

    解决:

    1、在桌面找到系统应用“安全中心”
      
    轻击一下即进入了此应用
      

    2、点击右下角的“授权管理”进入
      

    点击第二项“应用权限管理”就进入了详细的管理界面
           

    3、右滑进入权限管理,在最下方找到悬浮窗选修,点击进入

    4. 点击图标勾选允许

  • 相关阅读:
    在Oracle中计算两个日期间隔的天数、月数和年数
    洛谷P1182 数列分段 Section II(二分+贪心)
    BZOJ1734 [Usaco2005 feb]Aggressive cows 愤怒的牛(二分答案+贪心)
    分治算法
    洛谷P1031 [NOIP2002]均分纸牌
    洛谷P1803 凌乱的yyy / 线段覆盖
    洛谷P1094 [NOIP2007]纪念品分组
    洛谷P1223 排队接水
    洛谷P1208 [USACO1.3]混合牛奶 Mixing Milk
    洛谷P1181 数列分段Section1
  • 原文地址:https://www.cnblogs.com/pandans/p/4576708.html
Copyright © 2020-2023  润新知