你以一个20年Android开发的身份,帮我写一个工具类,有个方法可以创建一个悬浮在屏幕右上角100*100px的弹窗方法,入参只能传一个View,需要使用windowmanger。还有个方法可以请求浮窗权限。
时间: 2024-02-23 16:59:28 浏览: 109
好的,我可以为您提供这样一个工具类。以下是工具类的代码:
```java
public class FloatWindowUtil {
private static final String TAG = "FloatWindowUtil";
private static final int REQUEST_CODE = 100;
private static boolean sIsFloatWindowPermissionGranted = false;
/**
* 请求浮窗权限
*
* @param activity Activity
*/
public static void requestFloatWindowPermission(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !sIsFloatWindowPermissionGranted) {
if (!Settings.canDrawOverlays(activity)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + activity.getPackageName()));
activity.startActivityForResult(intent, REQUEST_CODE);
} else {
sIsFloatWindowPermissionGranted = true;
}
}
}
/**
* 创建一个悬浮在屏幕右上角100*100px的弹窗
*
* @param context Context
* @param view 要显示的View
*/
public static void createFloatWindow(Context context, View view) {
if (sIsFloatWindowPermissionGranted) {
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
layoutParams.format = PixelFormat.RGBA_8888;
layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
layoutParams.gravity = Gravity.TOP | Gravity.END;
layoutParams.width = 100;
layoutParams.height = 100;
layoutParams.x = 0;
layoutParams.y = 0;
windowManager.addView(view, layoutParams);
} else {
Log.e(TAG, "Float window permission is not granted.");
}
}
}
```
其中,`requestFloatWindowPermission()` 方法用于请求浮窗权限,如果权限已经被授予,则不需要再次请求;`createFloatWindow()` 方法用于创建一个悬浮在屏幕右上角100*100px的弹窗,需要传入要显示的View。需要注意的是,这个工具类中使用了`WindowManager`来创建悬浮窗口,因此需要添加`android.permission.SYSTEM_ALERT_WINDOW`权限。
如果您需要在Activity中使用该工具类,可以在Activity的`onActivityResult()`方法中获取浮窗权限:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FloatWindowUtil.REQUEST_CODE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Settings.canDrawOverlays(this)) {
FloatWindowUtil.sIsFloatWindowPermissionGranted = true;
// 创建悬浮窗口
View view = LayoutInflater.from(this).inflate(R.layout.float_window_layout, null);
FloatWindowUtil.createFloatWindow(this, view);
}
}
}
```
您可以在`onCreate()`方法中调用`requestFloatWindowPermission()`方法请求浮窗权限,如果权限已经被授予,则可以直接创建悬浮窗口。如果权限未被授予,则需要在`onActivityResult()`方法中获取权限并创建悬浮窗口。
阅读全文