问题 代码在8.0以下系统可正常创建悬浮窗,8.0以上则创建不了。原因是悬浮窗样式需要重新设置。
解决方案 增加SDK判断代码
1 2 3 4 5 6 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { wmParams.type = LayoutParams.TYPE_APPLICATION_OVERLAY; } else { wmParams.type = LayoutParams.TYPE_PHONE; }
判断是否拥有悬浮窗权限并申请 安卓6.0(代号M,SDK 23)之后,需要动态申请权限,悬浮窗权限也不例外。所以可以在添加以下代码来申请悬浮窗权限。 PS:当然,必须在AndroidManifest.xml
中添加<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
1 2 3 4 5 6 7 8 if (Build.VERSION.SDK_INT >= 23 ) { if (!Settings.canDrawOverlays(activity)) { Intent it = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); activity.startActivityForResult(it, 1 ); } }
1 2 3 4 5 6 7 8 9 10 11 @TargetApi(23) protected void onActivityResult (int reqCode, int resCode, Intent data) { if (!Settings.canDrawOverlays(this )) { Toast.makeText(this , "未授予悬浮窗权限!" , Toast.LENGTH_LONG).show(); } else { Toast.makeText(this , "悬浮窗权限授予成功!" , Toast.LENGTH_SHORT).show(); } }