Filter exceptions
henrichg opened this issue · 6 comments
henrichg commented
Is possible to filter exceptions? For example android.os.DeadSystemException. Is not good for my users to generate ACRA notification for this excpetion.
F43nd1r commented
This would be a job for a ReportingAdministrator
, where you can filter for anything you want.
henrichg commented
Good, and exists exaple for this, as for custom ReportSender?
https://github.com/ACRA/acra/tree/master/examples/acra-basic-java-example
F43nd1r commented
@AutoService(ReportingAdministrator::class)
class MyReportingAdministrator: ReportingAdministrator {
override fun shouldStartCollecting(context: Context, config: CoreConfiguration, reportBuilder: ReportBuilder): Boolean {
return reportBuilder.exception !is DeadSystemException
}
}
henrichg commented
Hm implemented, but at start of application, this exception is generated:
Unable to load ReportingAdministrator
java.util.ServiceConfigurationError: org.acra.config.ReportingAdministrator: Provider sk.henrichg.phoneprofilesplus.CustomACRAReportingAdministrator could not be instantiated
at java.util.ServiceLoader.fail(ServiceLoader.java:233)
at java.util.ServiceLoader.access$100(ServiceLoader.java:183)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:392)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:416)
at java.util.ServiceLoader$1.next(ServiceLoader.java:494)
at org.acra.plugins.ServicePluginLoader.loadInternal(ServicePluginLoader.kt:49)
at org.acra.plugins.ServicePluginLoader.loadEnabled(ServicePluginLoader.kt:32)
at org.acra.builder.ReportExecutor.<init>(ReportExecutor.kt:227)
at org.acra.reporter.ErrorReporterImpl.<init>(ErrorReporterImpl.kt:167)
at org.acra.ACRA.init(ACRA.kt:171)
at org.acra.ACRA.init(ACRA.kt:126)
at org.acra.ACRA.init$default(ACRA.kt:124)
at org.acra.ACRA.init(Unknown Source:13)
at sk.henrichg.phoneprofilesplus.PPApplication.attachBaseContext(PPApplication.java:1402)
at android.app.Application.attach(Application.java:370)
at android.app.Instrumentation.newApplication(Instrumentation.java:1159)
at android.app.LoadedApk.makeApplication(LoadedApk.java:1324)
at android.app.ActivityThread.handleMakeApplication(ActivityThread.java:7469)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7440)
at android.app.ActivityThread.access$1500(ActivityThread.java:301)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2148)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8506)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Caused by: java.lang.IllegalAccessException: void sk.henrichg.phoneprofilesplus.CustomACRAReportingAdministrator.<init>() is not accessible from java.lang.Class<java.util.ServiceLoader$LazyIterator>
at java.lang.Class.newInstance(Native Method)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:388)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:416)
at java.util.ServiceLoader$1.next(ServiceLoader.java:494)
at org.acra.plugins.ServicePluginLoader.loadInternal(ServicePluginLoader.kt:49)
at org.acra.plugins.ServicePluginLoader.loadEnabled(ServicePluginLoader.kt:32)
at org.acra.builder.ReportExecutor.<init>(ReportExecutor.kt:227)
at org.acra.reporter.ErrorReporterImpl.<init>(ErrorReporterImpl.kt:167)
at org.acra.ACRA.init(ACRA.kt:171)
at org.acra.ACRA.init(ACRA.kt:126)
at org.acra.ACRA.init$default(ACRA.kt:124)
at org.acra.ACRA.init(Unknown Source:13)
at sk.henrichg.phoneprofilesplus.PPApplication.attachBaseContext(PPApplication.java:1402)
at android.app.Application.attach(Application.java:370)
at android.app.Instrumentation.newApplication(Instrumentation.java:1159)
at android.app.LoadedApk.makeApplication(LoadedApk.java:1324)
at android.app.ActivityThread.handleMakeApplication(ActivityThread.java:7469)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7440)
at android.app.ActivityThread.access$1500(ActivityThread.java:301)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2148)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8506)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
My custom adminstrator:
@AutoService(ReportingAdministrator.class)
public class CustomACRAReportingAdministrator implements ReportingAdministrator {
CustomACRAReportingAdministrator() {
Log.e("CustomACRAReportingAdministrator constructor", "xxxx");
}
@Override
public boolean shouldStartCollecting(@NonNull Context context,
@NonNull CoreConfiguration config,
@NonNull ReportBuilder reportBuilder) {
...
}
}
F43nd1r commented
The exception is pretty clear: Your constructor needs to be public
henrichg commented
Oh, yes. :-)
Thank you very much, working. ;-)