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. 点击图标勾选允许

时间: 2024-11-07 09:43:58

MIUI显示悬浮窗的相关文章

Android无需权限显示悬浮窗, 兼谈逆向分析app

最近UC浏览器中文版出了一个快速搜索的功能, 在使用其他app的时候, 如果复制了一些内容, 屏幕顶部会弹一个窗口, 提示一些操作, 点击后跳转到UC, 显示这个悬浮窗不需要申请android.permission.SYSTEM_ALERT_WINDOW权限. 如下图, 截图是在使用Chrome时截的, 但是屏幕顶部却有UC的view浮在屏幕上. 我使用的是小米, 我并没有给UC授悬浮窗权限, 所以我看到这个悬浮窗时是很震惊的. 截图 悬浮窗原理 做过悬浮窗功能的人都知道, 要想显示悬浮窗, 要

关于Android WindowManager显示悬浮窗的动画效果

要实现WindowManager添加的窗口,实现动画显示,就需要添加如下红色的属性,其他的添加View只要设置其Animations属性也会实现动画,当然自己实现也可,但是能直接用系统的已经实现好的,也很方便. windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); WindowParams = new LayoutParams(LayoutParams.FLAG_FULLSCREEN,

关于MIUI悬浮窗权限问题的解决方案

先扯会....好久没写Blog了....这段时间有点小忙...瞎忙.....忙的自己都感觉都不应该.....严重影响了生活质量......生活的幸福指数!!!.....到现在还特么的单身!!!求介绍啊...... MIUI是我个人非常喜欢的ROM....虽然有诸多的不爽....但是搞开发就能理解.....写好一个产品是多么的不易.....好多东西的不可控....精力的有限! 现在买手机都看能不能刷MIUI..不能刷的就犹豫了..... ===============盗链....盗内容的都是Erb

Android不依赖Activity的全局悬浮窗实现

Android悬浮窗实现 实现基础 Android悬浮窗实现使用WindowManager ,WindowManager介绍 通过Context.getSystemService(Context.WINDOW_SERVICE)可以获得 WindowManager对象. 每一个WindowManager对象都和一个特定的 Display绑定. 想要获取一个不同的display的WindowManager,可以用 createDisplayContext(Display)来获取那个display的

android桌面悬浮窗仿QQ手机管家加速效果

主要还是用到了WindowManager对桌面悬浮进行管理. 需要一个火箭的悬浮窗 一个发射台悬浮窗  ,判断火箭是否放到了发射台,如果放上了,则使用AsyTask 慢慢将火箭的图片往上移.结束后., 返回原位. 1.打开activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.andro

Android仿360手机卫士悬浮窗效果

请看下图:                         首先是一个小的悬浮窗显示的是当前使用了百分之多少的内存,点击一下小悬浮窗,就会弹出一个大的悬浮窗,可以一键加速.好,我们现在就来模拟实现一下类似的效果. 先谈一下基本的实现原理,这种桌面悬浮窗的效果很类似与Widget,但是它比Widget要灵活的多.主要是通过WindowManager这个类来实现的,调用这个类的addView方法用于添加一个悬浮窗,updateViewLayout方法用于更新悬浮窗的参数,removeView用于移除

Android桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8689140 大家好,今天给大家带来一个仿360手机卫士悬浮窗效果的教程,在开始之前请允许我说几句不相干的废话. 不知不觉我发现自己接触Android已有近三个年头了,期间各种的成长少不了各位高手的帮助,总是有很多高手喜欢把自己的经验写在网上,供大家来学习,我也是从中受惠了很多,在此我深表感谢.可是我发现我却从来没有将自己平时的一些心得拿出来与大家分享,共同学习,太没有奉献精神了.

兼容MIUI5和MIUI6的开启悬浮窗设置界面

前一段时间项目中需要对MIUI的悬浮窗开启设置界面进行了引导和跳转,MIUI6中又改变了开启悬浮窗设置的位置,在苦苦寻觅之后,找到了解决的方法,贴出来以方便大家参考和使用. @Override public void onClick(View view) { //关闭提示框 MIUIFloatWindowHelpDialog.this.dismiss(); //跳转到设置界面 try { Intent localIntent = new Intent( "miui.intent.action.A

Launcher知识的demo,手机管家小伙家与悬浮窗

Launcher知识的demo,主要仿的手机管家小伙家与悬浮窗的效果.东西比较简单,直接贴代码 主要用到了windowManager 中的更新updateViewLayout(view,params),和 添加windowManager.addView()和删除windowManager.removeView() 移动launcher主要是updateViewLayout(view,params),中的params来实现 贴几个主要类,全部源码请自己下载 package com.pzf.flow