悬浮窗不依赖Activity
时间: 2023-05-25 19:06:33 浏览: 111
悬浮窗其实是以系统应用的形式存在的,在手机系统中,可以在任何应用上方显示,因此,不需要依赖于任何Activity。
悬浮窗的实现流程一般是:在应用程序中创建一个Service,在Service中创建一个WindowManager对象,然后将自定义的View添加到WindowManager中,这样就可以显示在屏幕上了。当不需要显示时,直接将View从WindowManager中移除,悬浮窗就会消失。
因为悬浮窗属于系统应用,所以需要申请SYSTEM_ALERT_WINDOW权限,并且在Android 6.0以上版本需要动态获取权限。
相关问题
Android activity 手机悬浮窗
在 Android 中,可以使用悬浮窗实现在应用外部显示一个小窗口,通常用于显示通知、播放视频、聊天窗口等功能。要实现悬浮窗,可以使用 WindowManager 和 View 来创建一个自定义的 View,并将其添加到 WindowManager 中,代码示例如下:
```java
// 获取 WindowManager
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
// 创建一个自定义的 View
View view = LayoutInflater.from(this).inflate(R.layout.my_float_view, null);
// 设置 View 的参数
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 100;
params.y = 100;
// 将 View 添加到 WindowManager
wm.addView(view, params);
```
需要注意的是,为了保证应用能够显示悬浮窗,需要在 AndroidManifest.xml 中添加权限声明:
```xml
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
```
另外,从 Android 8.0 开始,为了防止悬浮窗被滥用,需要在应用中动态请求权限才能显示悬浮窗,示例代码如下:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE_OVERLAY_PERMISSION);
} else {
showFloatView();
}
} else {
showFloatView();
}
```
其中,REQUEST_CODE_OVERLAY_PERMISSION 是一个自定义的请求码,需要在 onActivityResult 中处理权限请求结果。
以上就是 Android 中实现悬浮窗的基本过程,希望能对你有所帮助。
android6.0悬浮窗内不可输入
Android 6.0悬浮窗内不可输入的问题可能是由于系统隐私和权限设置的改变导致的。Android 6.0系统引入了运行时权限控制的概念,以加强用户对应用程序的控制。在悬浮窗中不可输入的问题通常是因为悬浮窗权限被禁止所致。
为了解决这个问题,你可以按照以下步骤进行操作:
1. 在设置中找到并打开“应用程序权限”选项。
2. 检查是否已经为你的应用程序授予了悬浮窗权限。如果没有,请为其授予悬浮窗权限。
3. 如果已经授予了悬浮窗权限,但仍然无法输入,你可以尝试取消授权并重新启用悬浮窗权限,以此来解决问题。
4. 如果问题仍然存在,可能是因为其他应用程序或系统设置导致的冲突。你可以尝试关闭其他应用程序或恢复系统设置,然后重新启动手机来解决问题。
总之,Android 6.0悬浮窗内不可输入的问题通常是由于权限设置引起的。通过正确设置悬浮窗权限,并排查其他可能的冲突,你应该能够解决这个问题。如果问题仍然存在,建议你咨询专业技术人员的帮助。