Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]:在子进程Activity无法显示logcat悬浮按钮 #35

Closed
zwonb opened this issue Jan 11, 2024 · 9 comments
Closed

[Bug]:在子进程Activity无法显示logcat悬浮按钮 #35

zwonb opened this issue Jan 11, 2024 · 9 comments
Labels
bug Something isn't working

Comments

@zwonb
Copy link

zwonb commented Jan 11, 2024

框架版本【必填】

11.82

问题描述【必填】

通知权限关闭的状态下(还有一个bug未适配8.0+通知渠道开关。总通知权限打开,logcat通知渠道关闭,此时应该也是需要显示悬浮窗按钮),跳转到子进程Activity,无法显示悬浮按钮

复现步骤【必填】

关闭通知,授权悬浮窗权限,打开App,跳转到子进程Activity,bug出现

是否必现【必填】

项目 targetSdkVersion【必填】

31

出现问题的手机信息【必填】

小米13

出现问题的安卓版本【必填】

android14

问题信息的来源渠道【必填】

自己遇到的

是部分机型还是所有机型都会出现【必答】

全部

框架最新的版本是否存在这个问题【必答】

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

是否可以通过 Demo 来复现该问题【必答】

提供报错堆栈

No response

提供截图或视频

demo
MyApplication.zip

提供解决方案

改成系统悬浮窗按钮

@zwonb zwonb added the bug Something isn't working label Jan 11, 2024
@getActivity
Copy link
Owner

Logcat-11.85.aar.zip

@getActivity
Copy link
Owner

@zwonb 小伙子,问题修复了,你可以下载上面的 aar 包测试一下。

@getActivity
Copy link
Owner

  • 另外需要注意加上 EasyWindow 的远程依赖,否则会出现运行报错
dependencies {
    // 悬浮窗框架:https://github.com/getActivity/EasyWindow
    implementation 'com.github.getActivity:EasyWindow:10.6'
}

@zwonb
Copy link
Author

zwonb commented Jan 11, 2024

@zwonb 小伙子,问题修复了,你可以下载上面的 aar 包测试一下。

子进程Activity依旧不会显示悬浮窗按钮

@zwonb zwonb closed this as completed Jan 11, 2024
@zwonb zwonb reopened this Jan 11, 2024
@getActivity
Copy link
Owner

Logcat-11.85.aar.zip

小伙子,很抱歉,我理解错了你的意思,这个包其实修复的是,通知渠道关闭后,框架不显示通知入口,也不显示悬浮球入口的问题,问题原因是框架内部只对通知栏开关进行了判断,并没有对具体的通知渠道开关进行判断。

@getActivity
Copy link
Owner

@zwonb 小伙子,问题修复了,你可以下载上面的 aar 包测试一下。

子进程Activity依旧不会显示悬浮窗按钮

小伙子,我测试了一下,你这个问题确实能复现,但是修复不了,这是因为你开了多进程,在开启子进程的情况下,会二次创建 Application 对象,然后重新走一遍 onCreate 方法,但是 ContentProvider 组件就不一样了,并不会重复创建,这就导致一个问题,Logcat 这个框架本身就依赖 ContentProvider 作为框架的初始化入口,但是它在子进程并不会被系统二次创建,更别说调用了,这个属于硬伤,目前暂时没有想到什么好的解决方案,如果你有的话,欢迎提供给我。

@getActivity
Copy link
Owner

getActivity commented Jan 13, 2024

当然不代表这就没有解决手段,你可以手动初始化 Logcat 框架,具体方式如下:

第一步:先在清单文件中去除 Logcat 框架初始化入口

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.xxx.xxx">

    <application>

        <provider
            android:name="com.hjq.logcat.LogcatProvider"
            tools:node="remove" />

    </application>

</manifest>

第二步:在 Application.onCreate 方法中手动初始化 Logcat 框架

public final class XxxApplication extends Application {

   @Override
   public void onCreate() {
      super.onCreate();

       try {
           Class<?> logcatProviderClass = Class.forName("com.hjq.logcat.LogcatProvider");
           Object logcatProvider = logcatProviderClass.newInstance();
           Method attachInfoMethod = logcatProviderClass.getMethod("attachInfo", Context.class, ProviderInfo.class);
           attachInfoMethod.setAccessible(true);
           attachInfoMethod.invoke(logcatProvider, this, null);
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

@zwonb
Copy link
Author

zwonb commented Jan 18, 2024

可以判断如果开启了悬浮窗权限优先使用系统悬浮窗

@getActivity
Copy link
Owner

可以判断如果开启了悬浮窗权限优先使用系统悬浮窗

@zwonb 收到,多谢小伙子的建议。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants