添加ProgressBar后出现ACCESS_SURFACE_FLINGER权限错误如何解决?
解决添加ProgressBar后出现ACCESS_SURFACE_FLINGER权限错误的方案
以下是几个不用添加权限就能解决问题的可行方法:
调整ProgressBar的样式与交互属性
给ProgressBar添加以下属性,禁用不必要的触摸交互,避免触发输入策略更新:android:focusable="false" android:focusableInTouchMode="false" android:clickable="false"同时尝试替换为更基础的系统样式,比如
@android:style/Widget.ProgressBar.Small,避免使用可能涉及系统级交互的特殊样式。自定义简单进度条替代系统ProgressBar
自己写一个极简的自定义View实现进度显示逻辑,完全避开系统ProgressBar的潜在权限问题:public class SimpleProgressBar extends View { private float progress = 0f; private Paint paint = new Paint(); public SimpleProgressBar(Context context) { super(context); init(); } public SimpleProgressBar(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { paint.setColor(Color.BLUE); paint.setStyle(Paint.Style.FILL); } public void setProgress(float progress) { this.progress = Math.max(0, Math.min(100, progress)); invalidate(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); float barWidth = getWidth() * (progress / 100f); canvas.drawRect(0, 0, barWidth, getHeight(), paint); } }在布局里直接使用这个自定义View,通过
setProgress方法更新进度即可。检查窗口类型与布局层级
如果ProgressBar是在悬浮窗、Dialog等特殊窗口中,不要使用TYPE_SYSTEM_ALERT这类需要系统权限的窗口类型,换成普通应用窗口类型(比如TYPE_APPLICATION),避免触发系统级的输入权限检查。排查系统版本兼容问题
若问题只出现在特定Android版本(如Android 10及以上),可以尝试在代码中动态设置ProgressBar的indeterminate属性为false(如果不需要模糊进度),或者避免调用可能触发输入策略更新的方法,比如某些和触摸反馈相关的API。
内容的提问来源于stack exchange,提问作者SlipperyBarrel
相关产品推荐
相关产品推荐

