A Case Study in

Android for Mobile: FoleyFind

The Tools

  • Android Studio: IDE for Android operating system
  • Google Maps API: Location services
  • Android Map Utils: Extensions for maps
  • MediaRecorder Library: Multimedia framework

The Project

Build an app using the Android framework, beginning with a proposal that includes the use of two sensors.

The Tasks

  • Build a foley recorder to capture sound
  • Build a dynamic list view of database records
  • Use a map to display location of sound recordings
  • Create custom markers for the recordings on a map

Process

The original map marker icons.

To create the custom icons, it was important to first be able to access the marker items as they were being rendered. The items were being clustered as they were rendered to allow multiple sounds at one location to be easily accessed. However, due to the clustering functionality, it was difficult to customize the markers.

.

To address this problem, a custom layout was applied to each instance of an item on the map, which displays the necessary and relevant information. It shows a music note icon and the file name of the location where it was recorded. By overriding the following method of the Clustering library, onBeforeClusterItemRendered(), the custom layout was added to the content view.

A mobile phone screen shot of the custom map markers.
The result of custom map marker icons and clustering.

The result is a an application that exceeds the project requirements.

Providing an opportunity for aural delight by giving the user a responsive and curated audio experience.

A contextual scene on the street of a hand holding a phone showing the intro screen to the FoleyFind app.
The intro screen of FoleyFind, in the context of customer use.

Reflections

On Making an Android App

A major accomplishment of this project beyond solving the custom marker icons, is in the code. The structure is reinforced by encapsulating functionality into appropriate classes and packages. This organization keeps the logic clean and maximizes the reusability of the code. Using unit testing, there were logical errors caught as well. It is good practice to design code that is compartmentalized so that design patterns, like chaining (which were used in the database query creations) can be reused. Lastly, creating an Android app is not just about Java nor the implementation of libraries, there is extensive design and planning required, which must be learned through trying.