总结一下Android悬浮框碰到的问题:
1、悬浮窗授权
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(getApplicationContext())) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(intent);
return;
} else {
initViews();
}
} else {
initViews();
}
2、TYPE_TOAST和TYPEPHONE
部分小米手机TYPE_TOAST也需要权限
mLayoutParams.type = WindowManager.LayoutParams.TYPE_TOAST;
3、点击回调和移动回调
public interface OnUpdateViewLayoutListener {
public void onUpdateViewLayout(float x, float y, View view);
}
public interface OnViewClickListener {
public void onClick();
}
4、 是否在前台
private boolean isAppOnForeground() {
ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
String packageName = getApplicationContext().getPackageName();
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager
.getRunningAppProcesses();
if (appProcesses == null)
return false;
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.processName.equals(packageName)
&& appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
}
}
return false;
}
1、悬浮框一直显示的话不需要加入方法4的判断;2、如果app内部分界面显示悬浮框,可以在基类控制悬浮框的显示和隐藏。demo下载地址:
希望对碰到类似问题的同学有所帮助。