Android 如何在运行时禁用Crashlytics以响应用户首选项更改?

Android 如何在运行时禁用Crashlytics以响应用户首选项更改?,android,crashlytics,Android,Crashlytics,我想在我的Android应用程序的设置活动中提供一个设置,允许用户禁用我们使用的分析软件,包括Crashlytics。但是,Crashlytics.start(Context)在用户进入设置页面之前很久就被调用了,我没有看到一个等价的Crashlytics.stop(Context)函数。在应用程序启动后,是否可以停止应用程序中的Crashlytics?我被告知,我正在尝试的特定案例目前不可能。但是,我可以通过在Crashlytics仪表板的应用程序设置部分启用“隐私提示”,让用户控制是否向Cr

我想在我的Android应用程序的设置活动中提供一个设置,允许用户禁用我们使用的分析软件,包括Crashlytics。但是,
Crashlytics.start(Context)
在用户进入设置页面之前很久就被调用了,我没有看到一个等价的
Crashlytics.stop(Context)
函数。在应用程序启动后,是否可以停止应用程序中的Crashlytics?

我被告知,我正在尝试的特定案例目前不可能。但是,我可以通过在Crashlytics仪表板的应用程序设置部分启用“隐私提示”,让用户控制是否向Crashlytics发送数据:

要选择要添加对话框的应用程序,请单击左上角的“启用隐私提示”

发件人:

这很容易做到

  • 在应用程序设置中添加首选项,并让用户说明他是否想这样做
  • 实现UncaughtExceptionHandler并执行以下操作

  • Crashlytics启动后无法停止,但可以通过覆盖默认的UncaughtExceptionHandler来实现所需的行为:

        final Thread.UncaughtExceptionHandler defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
        Fabric.with(this, new Crashlytics());
        final Thread.UncaughtExceptionHandler crashlyticsExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
        Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
            if (isAnalyticsAllowed) {
                crashlyticsExceptionHandler.uncaughtException(t, e);
            } else {
                defaultExceptionHandler.uncaughtException(t, e);
            }
        }); 
    

    您可以考虑用户在下一个应用程序启动时的选择,跳过初始化。对于当前应用程序会话,他将启用crashlytics。你认为这对用户来说是个大问题吗?因为这是一个与隐私相关的问题,我认为不让偏好改变立即生效是不诚实的。我们的用户肯定会关心数据是否发送给第三方,但他们明确要求不发送。您是否可以通过执行系统来强制应用程序退出。在设置标志(启动时检查)并告诉用户重新启动应用程序后退出(0)?不是很好,但会强制crashlytics有效禁用。那么每次发生崩溃时都会询问用户,是不是?
        final Thread.UncaughtExceptionHandler defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
        Fabric.with(this, new Crashlytics());
        final Thread.UncaughtExceptionHandler crashlyticsExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
        Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
            if (isAnalyticsAllowed) {
                crashlyticsExceptionHandler.uncaughtException(t, e);
            } else {
                defaultExceptionHandler.uncaughtException(t, e);
            }
        });