Wiki -VoIP Topics

Android softphone development


Development
MizuDroid is a fast and feature rich SIP softphone for Android devices, developed by Mizutech with special care for the latest Android features and optimizations for minimal battery usage. 
The MizuDroid Android Softphone is based on the high performance AJVoIP Android SIP library.
New major released (published also on our website and on Google Play) are published usually once per year, however the software is in continuous development and new stable versions are released every month to be delivered for our customers.
MizuDroid is a mature, stable SIP client solution for Android and we provide customized versions for our customers.

The relevant changes in the major new versions are listed below:

Latest stable:

For new customers we always send the latest stable version which usually contains many improvements above the last published demo release. Internally we release a new stable version every month, however the Google Play published version and downloadable demo on this website is updated only around once per year. Ask us if you wish to test with the latest version.
 

MizuDroid v.4.0.2 (Jan 8, 2024):

Updated SIP and media stack with a list of improvements and bug fixes. There is no major changes in this release; all new features will be merged only in the upcoming new version. Also we haven't published any upgrade to the PlayStore for the MizuDroid SIP Softphone, however customized versions are always built from the latest stable release.

 

MizuDroid v.4.0 (April 2, 2023):

  • new: display prominent disclosure disclaimer before asking for permissions
  • new: failback to built-in contact list if no Contacts permission were provided
  • new: removed READ_PHONE_STATE permission requests
  • new: removed other not so important and unnecessary permission requests
  • new: optimizations for Android 13 TIRAMISU (targetSdkVersion set to 33)
  • new: upgraded to latest SIP/media stack
  • new: IPv6 support
  • new: support for translations
  • new: web portal for custom translations
  • new: configurable file transfer
  • new: auto gain control enabled by default
  • new: support for transfer Replaces
  • new: support for In-Reply-To and Authentication-Info
  • new: support for maxptime
  • new: auto guess max packet length
  • new: keepalive timeouts
  • new: settings input focus and soft keyboard popup
  • new: proxy address also in the SIP account advanced settings
  • new: haptic feedback or vibrate on call connect/disconnect/chat
  • improved: push notifications
  • improved: incoming chat notifications
  • improved: missed call notifications
  • improved: contact search
  • improved: file transfer
  • improved: memory and thread management (better performance, less CPU usage)
  • improved: recovery and failover (try other transport protocols, SRV DNS, re-register, re-init)
  • improved: attended call transfer
  • improved: re-invite and update
  • improved: call mute and call hold
  • improved: presence
  • improved: SRTP negotiatons
  • improved: AEC settings
  • improved: handling dns records
  • improved: RTP headers and timing
  • improved: network discovery
  • improved: NAT handling
  • improved: SDP parsing
  • improved: WebRTC video
  • improved: handle 513 smaller retry
  • improved: remove not negotiated codec's
  • improved: dynamic codec payload number allocations
  • improved: logical SIP URI handling
  • improved: TCP/TLS connections to multiple servers
  • improved: lower keypad feedback volume
  • improved: settings backup
  • improved: log upload
  • improved: a long list of other minor changes
  • fix: setting loss on kill while saving
  • fix: timestamp increment while mute/hold
  • fix: TCP/TLS reconnect
  • fix: duplicate contact display
  • fix: auth for IM/chat
  • fix: auto answer settings
  • fix: unnecessary switch to tunneling
  • fix: prevent dial-plan apply multiple times
  • fix: OPTIONS handling in call sessions
  • fix: ip subnet mismatch in some conditions
  • fix: tech prefix insert with full SIP URI
  • fix: a long list of other minor bug fixes and improvements

MizuDroid v.3.8 (Dec 8, 2022):

Updated SIP and media stack with a list of improvements and bug fixes. There is no major changes in this release; all new features will be merged only in the upcoming new version. Also we haven't published any upgrade to the PlayStore yet for the MizuDroid SIP Softphone, however customized versions are always built from the latest stable release.

MizuDroid v.3.7 (Dec 21, 2021):

This is a quality upgrade with bug fixes, improvements and optimizations. Includes also an updated privacy policy and a fix for the incoming call issue.

MizuDroid v.3.6 (July 23, 2021):

  • new: optimizations for Android 11 and Android 12
  • new: Bundle releases (among APK)
  • new: USSD notifications
  • new: RFC 8599 standard for SIP Push Notifications
  • new: app built-in/local contact list (local_contact_list)
  • new: callcenter integration: incomingcallpage, outgoingcallpage, extramenuurl/extramenutxt
  • new: new user register / sign-up integration
  • new: start-page URL option for the customized versions
  • new: 3PCC support
  • new: transport protocol failover on connection failure
  • new: RFC 7989 implementation (Session-ID header)
  • new: compact SIP headers
  • new: FCM for secondary accounts
  • new: handle Android OS data saver option
  • removed: native dialer integration (slow Google Play approval for the required extra permission)
  • improved: SIP and media stack upgraded to latest stable version
  • improved: performance optimizations
  • improved: TLS option for transport also in the basic sip settings
  • improved: multiple simultaneous calls
  • improved: auto call retry on call failures with changed parameters
  • improved: re-resolve dns on register fail (maybe server ip changed if on DHCP)
  • improved: auto reduce UDP SIP message size if large packets are dropped because MTU
  • improved: multiple accounts handling
  • improved: presence dialogs
  • improved: FCM registration via gateway now considers also the transportprotocol
  • improved: don't display realm setting for customized versions with serveraddress preconfigured
  • improved: native dialer integration
  • improved: RTC video calls
  • improved: TLS and SRTP
  • improved: SRV records
  • improved: jitter buffer
  • improved: reduced memory usage
  • improved: URI encode components/keyword replacements for HTTP/API requests
  • improved: restarting the sipstack on user switch on because network was changed
  • improved: going to idle much faster, lowest priority threads and memory trim when in idle
  • improved: background color
  • improved: outgoing call ringback tone
  • improved: many other minor improvements
  • fix: wait for network
  • fix: auto complete popup
  • fix: dialer integration unnecessary popup
  • fix: voicemail might send arbitrary peer username
  • fix: invalid port loaded from IP address
  • fix: launch app on incoming call
  • fix: presence negotiations might not start in some circumstances
  • fix: auto complete blocks number input
  • fix: accept special characters such as * in the username
  • fix: audio speedup in some circumstances (near jitter buffer overflow)
  • fix: sometime remains in "Loading..." state
  • fix: SIP signaling character set handling
  • fix: not connected issue
  • fix: SRTP key and sequence number handling
  • fix: settings file corrupted
  • fix: contact list toggle issue in some circumstances
  • fix: many other minor bug fixes

MizuDroid v.3.4.4 (February 3, 2021):

This is a quality upgrade with bug fixes, various improvements and optimizations.
We will not refresh the public freely downloadable MizuPhone on the Google Play with the new release, but from today our partners will receive new custom/branded builds based on this new release targeting API level 29, using also API level 30 (Android 11) features on new phones if available but still compatible even with ancient phones with api level 14 (down to Android v.4.0.1).

MizuDroid v.3.4.29 (October 7, 2020):

This is a quality upgrade with a long list of quality related fixes, improvements, bug fixes and performance optimizations. There was no major new features added into this release.

The new MizuDroid have been published today to the GooglePlay store but it will take a few days to become available with full rollout.
You can also download the softphone apk file from our website and install it manually if you wish or wait a few days for the Google Play upgrade.
Meantime we can already serve our customers from this new stable release with customized/branded releases.

MizuDroid v.3.2 (April 9, 2020):

  • new: native dialer integration
  • new: multiple simultaneous calls (among conference calls)
  • new: possibility to remove number/contact from the main page
  • new: app local contact list option (possibility to not use the native android contact list)
  • new: auto detect other phones on the same LAN
  • new: possibility to add name/label for secondary accounts
  • new: configuration option enable/disable honor OS datasaver,airplan and dnd settings (honordatasaver,honorairplan,honordnd)
  • new: autocomplete called number
  • new: push notification for chat
  • new: usevoip configuration option
  • new: speedup playback on high jitter queue
  • new: change limiter for all changer objects
  • new: NAT friendly register
  • new: implemented push notifications also for secondary accounts
  • new: query global state and important parameters
  • new: textmessaging setting
  • new: callreceiver options
  • new: don't disturb settings
  • new: enable/disable BLF options
  • new: custom customautoprovisioning
  • new: backup server option (alternative for SRV records)
  • new: DNS record caching
  • new: presence per user (ability to set different presence state per contact)
  • new: presence idle reports at user inactivity
  • new: order contacts by surname
  • new: server connect failover
  • new: multi-line user interface for the call page (if there are multiple simultaneous calls)
  • new: auto guess optimal default register interval
  • new: VideoAccept API
  • new: GetNetworkSpeed API
  • improved: user interface, numerous usability improvements
  • improved: multi account handling
  • improved: network type detection
  • improved: push notifications
  • improved: faster startup
  • improved: responsivity
  • improved: app vs OS DND handling. setting option and possibility to add exceptions
  • improved: customization/branding related improvements
  • improved: show the TLS transport option also at the basic settings
  • improved: multi account handling
  • improved: multi-line handling (multiple simultaneous calls)
  • improved: second incoming call notification
  • improved: hold and transfer
  • improved: volume change
  • improved: group chat
  • improved: chat feedback
  • improved: presence display
  • improved: RTC video call
  • improved: auto provisioning
  • improved: API_Transfer API_Conference check if target number already in call
  • improved: acoustic echo cancellation
  • improved: various jitter buffer improvements, better underrun detection and adjustments
  • improved: audio playback/recording threading
  • improved: better check for recording permission
  • improved: unregister
  • improved: offline chat
  • improved: idle state management
  • improved: better register state reports
  • improved: ICE on/off changes
  • improved: waitfortransfernotify
  • improved: normalizenumber
  • improved: check if should be registered
  • improved: honor isCleartextTrafficPermitted
  • improved: exception handling from native codec's
  • improved: many other minor improvements and micro optimizations
  • fix: call disconnect after 10 minutes
  • fix: call screen display on incoming push
  • fix: cannot remove/delete dial-plan rule
  • fix: call/message home screen shortcuts
  • fix: new contact with name/number only
  • fix: multi account register
  • fix: buffering issue with low jitter
  • fix: accept special characters such as * for the secondary accounts username
  • fix: can't re-enable presence
  • fix: catch on MeassureCPUSpeed Attempt to invoke virtual method 'android.os.PowerManager$WakeLock android.os.PowerManager.newWakeLock(int, java.lang.String)' on a null object reference
  • fix: D/NetworkSecurityConfig: No Network Security Config specified, using platform default
  • fix: 89 closed/resolved tickets from the last major release
  • fix: many other minor bug fixes

MizuDroid v.3.0 (May 31, 2019):

  • new: native dialer integration using ConnectionService
  • new: support and optimizations for Android Q (api level 29)
  • new: full 64 bit support, including also the native codec's
  • new: QR code based auto provisioning
  • new: usage without server/username/password (allowing direct calls to SIP URI's)
  • new: detect in charging state (and remove all battery optimizations while charging)
  • new: profile status
  • new: option to sort contacts by importance and make this the default
  • new: filter contacts: all, important, online
  • new: group chat
  • new: presence settings by user
  • new: change the colortheme at runtime
  • new: push notification for chat
  • new: invite friend option in the menu
  • new: add call/chat shortcut options
  • new: about me (from profile) send and display
  • new: contact option in the chat menu to jump to curret contact details
  • new: possibility to add multiple accounts with same username/password but different callerid
  • new: possibility to disable account
  • new: send picture
  • new: camera shot
  • new: search for settings
  • new: flexible new user signup
  • new: checknativecall customizable option
  • new: auto guess best transport protocol
  • new: chat sent feedback
  • improved: don't resend registered successfully many times
  • improved: GUI speedup, main contact entries cached
  • improved: push notifications
  • improved: settings cache
  • improved: notification channels
  • improved: start on boot
  • improved: firebase
  • improved: call mute
  • improved: accounts handling (including AC_FRIENDLYNAME)
  • improved: faster register state reports
  • improved: faster call accept
  • improved: auto-reconnect, fast detect network availability
  • improved: doze handling
  • improved: performance optimizations
  • improved: allow very long passwords
  • improved: delayed message delivery
  • improved: call recording
  • improved: background/foreground service switch
  • improved: detect and recover from permission issues while running in the background
  • improved: multiple accounts
  • improved: profile picture
  • improved: business edition licensing
  • improved: disconnect reason display
  • improved: design optimizations for tablets
  • improved: file transfer
  • improved: typing notifications
  • improved: new contact request
  • improved: media encryption defaults to auto now (auto try SRTP if transport is set to TLS)
  • improved: dial plan rules
  • improved: uploading logs
  • improved: view logs (scrolling)
  • improved: keep TLS connection
  • improved: setSustainedPerformanceMode usage
  • improved: device ID detection
  • improved: white-list handling
  • improved: wifi latency (take advantage of the new API capabilities such as WIFI_MODE_FULL_LOW_LATENCY or WIFI_MODE_FULL_HIGH_PERF)
  • impproved: if battery charging: run as service and never idle
  • improved: check application state (running, stopped, background/foreground) from IsIdle()
  • improved: option for both push and service: check handle correctly everywhere common.AskForWhiteList(false); common.CheckScheduledWakeUp();
  • improved: doze vs idle vs foreground service vs ignore battery optimization
  • fix: AUDIO_OUTPUT_FLAG_FAST denied, rates do not match 16000 Hz, require 48000 Hz
  • fix: don't use the caller-id in the contact header
  • fix: when searching for contact, display order should consider also the relevance
  • fix: various minor contacts handling bugs
  • fix: sometimes hangup button has X icon when call starts
  • fix: prefix rewrite
  • fix: duplicate chat messages

MizuDroid v.2.7 (November 2, 2018):

  • new: optimizations for Android Pie
  • new: audio focus
  • new: AudioAttributes.Builder with FLAG_LOW_LATENCY on api level 21
  • new: AudioAttributes.Builder with PERFORMANCE_MODE_LOW_LATENCY on api level 26
  • new: FLAG_AUDIBILITY_ENFORCED for loudspeaker
  • new: improved network change detection
  • new: offloading all time consuming tasks from the main thread
  • new: start page customization
  • new: group chat
  • new: offline messaging
  • new: advanced number rewrite
  • new: display contacts with pictures
  • new: centralized SIP account login settings
  • new: my profile with profile picture
  • new: second press on contact trigger the call
  • new: long press action for the main page entries
  • new: "Edit before call" setting
  • new: preferred codec setting
  • new: server side address book integration
  • new: incoming call settings
  • improved: multiple account handling
  • improved: incoming call/chat notifications (fullscreen vs notification)
  • improved: major SIP stack update
  • improved: user interface improvements
  • improved: video callback
  • improved: WiFi lock
  • improved: idle management
  • improved: cpu speed detection
  • improved: reduced audio latency
  • improved: FCM push notifications
  • improved: conference calls and group chat
  • improved: direx: getExternalFilesDir() getExternalMediaDirs()
  • improved: start the sipstack (commoninit) from a separate thread
  • improved: put back DeviceIsIdle for android sdk 23
  • improved: recheck permission request before call
  • improved: works also without permission for the native contact list
  • improved: start on boot
  • improved: performance (various optimizations)
  • fix: wifi lock only if current network is wifi WIFI_MODE_FULL_HIGH_PERF
  • fix: setStreamSolo deprecated sinceapi 23
  • fix: unreg also secondary accounts on exit
  • fix: incoming voip call while other voip call is already in progress
  • fix: incoming voip call while other native call is already in progress
  • fix: no dtmf sounds on keypad (should be very quiet sounds like the system dialer does)
  • fix: ask to save contact even if already exists
  • fix: Context.startForegroundService ANR
  • fix: handle split screen
  • fix: numerous other minor bug fixes

MizuDroid v.2.6 (July 22, 2018):

  • new: Android Oreo (API level 27) optimizations (while keeping full backward compatibility)
  • new: OPUS codec (full support, including all modes, FEC, mixing and recording)
  • new: presence
  • new: in-band DTMF (previously only RFC 2833 and SIP INFO was supported)
  • new: wideband conference
  • new: handle incoming calls while in sleep
  • new: push notification support (direct to SIP server or via FCM gateway)
  • new: WebRTC video support
  • new: quick fine-tune wizards
  • new: ability to move app to SD card
  • new: runtime permissions
  • new: scheduled wake up (used only for service mode to improve reliability on forced terminate)
  • new: enabledirectcalls config option
  • new: def mute and def hold settings
  • new: setting for realm
  • new: unicode for chat
  • new: chat composing notifications
  • new: sms auth (otp)
  • new: eof call stats per connection type
  • new: option to reject phone calls if VoIP call in progress
  • new: optimizations for Android 8 (Oreo)
  • new: improved backward compatibility with very old phones (API level 9)
  • new: option for native contact edit
  • new: forcereregister parameter
  • new: contact image/avatar display
  • new: last call details from the menu
  • new: upload log via email option
  • new: use latest android sdk features when available (codec, agc, etc)
  • new: quick restart sipstack on network change
  • new: check GetNetworkSpeed also before calls
  • new: AGC for recorded voice and volume normalization for the sides
  • new: auto codec switch from wide-band to narrow-band when low quality network is detected
  • new: handle the TRIM_MEMORY_RUNNING_LOW OS event
  • new: Native call on VoIP busy option
  • improved: many performance related optimizations
  • improved: native dialer integration
  • improved: hardware proximity
  • improved: SIP MESSAGE protocol for IM/chat
  • improved: multiple accounts
  • improved: local conference mixer
  • improved: background call handling (incoming calls while device in sleep)
  • improved: speed up activity load time
  • improved: sip stack updated to v.2.6 with many improvements and better compatibility
  • improved: battery usage (multiple micro optimizations)
  • improved: call quality (multiple related improvements and bug fixes)
  • improved: performance while in calls
  • improved: default contacts on the main page (favorites and last calls from native call history)
  • improved: exit behavior
  • improved: voicemail display and better voicemail asterisk compatibility
  • improved: background listener
  • improved: auto-start
  • improved: VoIP call hold
  • improved: CPU performance detection
  • improved: PLC
  • improved: multiple simultaneous calls
  • improved: various GUI improvements
  • improved: device id calculation
  • improved: call disconnect rason display
  • improved: remove ftp lib dependency: eliminate org.apache.commons (ftp)
  • improved: remove apache http client dependency (org.apache.http.client.HttpClient)
  • improved: removed all external dependencies
  • improved: use the API_GetPushNotificationsEx(false) / API_GetPushNotifications
  • improved: phone numbers for contact is displyed as "Call Other"
  • improved: double back key handling
  • improved: proguard config optimizations
  • improved: native call integration
  • improved: all tests wiht StrictMode
  • improved: NAT keep alive
  • improved: use of getLinkUpstreamBandwidthKbps
  • improved: removed exit popus
  • improved: minimize network usage
  • improved: keyboard shorcuts to work with Chromebox (chromeOS - ARCHon) ...especially for the dialpad
  • improved: password requirements verification
  • improved: no need for native dial permission anymore (so no any "dangerious" permission is asked at install)
  • improved: quick settings save
  • improved: various optimizations for chromebook
  • improved: correct handling of various number formats
  • improved: battery usage: check reregistration if no networks, also with tunneling
  • improved: isDeviceIdleMode() isPowerSaveMode()
  • improved: handle network changes better
  • improved: remember last internet speed
  • improved: turn on wifi only when user launch the app or make call
  • improved: a long list of other micro optimizations
  • fix: number rewrite (prefix rewrite)
  • fix: voice record
  • fix: G.729 framing/ptime for voice call recording
  • fix: double register at start
  • fix: multiple frames per packet for speex
  • fix: audio recording problem
  • fix: reject on busy option
  • fix: various SIP protocol related bug fixes
  • fix: remove unnecessary wifi scans (also "stuck partial wake loks", "excessive wakeups")
  • fix: file transfer require filemanager
  • fix: chat messages with special characters
  • fix: synchronized call for null objects
  • fix: disable spellcheck in target number box (and everywhere except chat)
  • fix: phone PopulateTask onPostExecute, activity has stopped
  • fix: settings save only on OK (not on cancel)
  • fix: reject double outbound calls to same destination
  • fix: slow loading and phone remains in loading issues
  • fix: if call was not connected, don't popup ask to save contact
  • fix: unable to register multiple accounts at the same time
  • fix: call recording playback
  • fix: phone PopulateTask onPostExecute, activity has stopped
  • fix: unreg also secondary accounts on exit
  • fix: more then 40 minor bug fix
  • known limitation:
  • doesn't work with all bluetooth devices
  • video requires RTC (handles automatically if SIP server has public IP)

You can access the archived change list from here.
MizuDroid is based for our Java SIP library and Android SIP library. You can find the changes for these here and here.

 

MizuDroid