Skip to content

Fix Android crashes on sound playback and backgrounded alerts#34

Closed
Copilot wants to merge 1 commit intomainfrom
copilot/fix-31
Closed

Fix Android crashes on sound playback and backgrounded alerts#34
Copilot wants to merge 1 commit intomainfrom
copilot/fix-31

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Jul 22, 2025

This PR fixes two critical Android crashes reported in issue #31:

Issues Fixed

1. Sound Playback Failure on Android 12+

Problem: FlutterPlatformAlert.playAlertSound() was failing with:

E/FileSource(32462): Failed to open file 'content://settings/system/notification_sound'. (No such file or directory)
E/AudioManager(32462): hasHapticChannels failure:java.io.IOException: Failed to instantiate extractor.

Root Cause: RingtoneManager.getDefaultUri(TYPE_NOTIFICATION) returns a URI that may not be accessible on Android 12+.

Fix: Added defensive programming with try-catch blocks and fallback mechanism:

  • Null checks for notification URI and RingTone objects
  • Fallback to RingtoneManager.getActualDefaultRingtoneUri() when default fails
  • Graceful handling when all options fail (continues silently without crashing)

2. AlertDialog Crash When App is Backgrounded

Problem: FlutterPlatformAlert.showAlert() was crashing with:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
	at android.app.AlertDialog$Builder.<init>(AlertDialog.java:500)

Root Cause: AlertDialog.Builder(this.activity) was called when activity was null (app backgrounded).

Fix:

  • Added null check for activity before creating AlertDialog
  • Returns proper error message: "Activity is not available. Cannot show alert when app is not in foreground."
  • Properly set activity = null in onDetachedFromActivity() lifecycle method

Changes Made

  • Enhanced error handling in playAlertSound() method with comprehensive try-catch blocks
  • Added activity null checks in both showAlert() and showCustomAlert() methods
  • Fixed lifecycle management to properly handle activity detachment
  • Maintained backward compatibility - API remains unchanged, just handles edge cases gracefully

Technical Details

  • Modified: android/src/main/kotlin/net/zonble/flutter_platform_alert/FlutterPlatformAlertPlugin.kt
  • Added 29 lines, removed 7 lines (minimal, surgical changes)
  • All changes follow defensive programming principles
  • No breaking changes to existing functionality

The plugin now handles Android 12+ restrictions and backgrounded app states gracefully, preventing crashes while maintaining all existing functionality.

Fixes #31.

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • dl.google.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED -XX:MaxMetaspaceSize=512m -Xmx4g -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /usr/share/gradle-8.14.3/lib/gradle-daemon-main-8.14.3.jar -javaagent:/usr/share/gradle-8.14.3/lib/agents/gradle-instrumentation-agent-8.14.3.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.14.3 (dns block)

If you need me to access, download, or install something from one of these locations, you can either:


💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.

@zonble zonble closed this Jul 22, 2025
Copilot AI changed the title [WIP] Android: Another error and crash Fix Android crashes on sound playback and backgrounded alerts Jul 22, 2025
Copilot AI requested a review from zonble July 22, 2025 06:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Android: Another error and crash

2 participants