I did contracting work on an Android app which records diagnostic data from smoke alarms. You press a button on the alarm and it emits a high-pitched series of chirps. Phone records, decodes and displays stuff like battery level, time of last recorded alarm etc. The recording scheme was rather simple, only 10 or so bits per second, and used Manchester coding. Most problems I ran into were due to audio hardware differences on different Android phones. Some phones have multiple mics and there is no consistent way to specify which one to use (or, more precisely, to know the location of the mic used). One workaround for this was to record in stereo--phones would usually record the each mic to its own stereo channel. Then the app can look at both, and use the one with a better SNR.
Some phones do proprietary audio filtering and noise reduction at hardware or driver level--you don't get access to the raw recorded audio data. On the upside, all phones these days are plenty fast to do CPU intensive audio processing.
Some phones do proprietary audio filtering and noise reduction at hardware or driver level--you don't get access to the raw recorded audio data. On the upside, all phones these days are plenty fast to do CPU intensive audio processing.