1. 使用懸浮框java
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />android
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的機器沒法彈出懸浮窗,經查證,小米有作個權限,默認懸浮窗都不能彈出。app
解決:ide
一、在桌面找到系統應用「安全中心」
輕擊一下即進入了此應用
二、點擊右下角的「受權管理」進入
點擊第二項「應用權限管理」就進入了詳細的管理界面
三、右滑進入權限管理,在最下方找到懸浮窗選修,點擊進入ui
4. 點擊圖標勾選容許3d