The main objective of this project is to design and develop an android tablet application for audio geo-tagging, which enables users to record where and when users touch a map display during an interview. The locational data is automatically related to the time in the interview when an interaction is performed on the map. Also, users are able to look up interviews by queries such as keyword, time or geographic location.
1.2 System Overview
The application allows users to look through existing interviews, create new interviews and search within all interviews using geographic queries. Interviews can be browsed by clicking on one of a list of existing interviews to obtain detailed information, edit the description, as well as delete the interview. To create a new interview, users need to specify the title and description of the interview. Then users can create an audio recording, and meanwhile draw lines or add markers on the geographic map that has two different view modes namely standard and satellite. Prior to saving the interview, users can preview the audio recording of the interview that displays all lines and markers with corresponding time-stamp on the map. In addition, users are able to look up interviews by keyword, time and location.
Source code can also be downloaded from the Github website. The application requires API 8 (android 2.2) as the minimum version of SDK. Moreover, the source code needs to be compiled with Google APIs in order to ensure google map function as expected.
Note: Android APIs and Google APIs can be downloaded from eclipse.
3. Project Layout
All relevant Java source code is placed under src/com.vuw.audiogeotagger package, which consists of a number of modules. Following shows the directory structure of src under AudioGeotagger.
- CommonHelper is the module used to show a progress dialog on the screen in order to inform users of the progress of current operation. MainActivity initializes the home screen of the app including the background, all textviews, buttons and the viewpager. In addition, this class checks whether a SD card has been inserted into the device. If so, it will create a folder on the SD card storage to save all audio files when the app is first time used.
- Map displays google map on the screen, which allows users to move, zoom in/out using one or two figures. It contains the code for all buttons that enable user to search for a location, change the view mode, draw shapes and markers, undo last action, start and pause recording and finally save the interview. The xml file is created and modified in this module when an operation is performed on the map.
- MapLinesOverlay is the overlay used to contain the shapes drawn by users. Similarly, MapMarkersOverlay is used to contain the markers added by users.
- MapObject represents an action users take on the map such as move, draw lines and add markers. A MapObject contains a range of information including the type, the location, and the date of the action.
- Overview provides the information of all lines and markers drawn during the interview and highlights selected item on the map. This module makes use of a sliding menu to display the detailed information that can be shown and hidden by swiping on the screen.
- Parser is used to parse the xml file, and produces a list of MapObject while parsing.
- Preview realizes the play functionality of the interview. This module employs a separate thread to play a list of MapObject derived from parsing the xml file. For fast-forward and rewind, the current thread is stopped and a new thread is started to play the interview at the specified location.
- Save displays the save page on the screen. This module will write the title, description, and the audio and xml paths of the interview into the file. Otherwise, the audio and xml files will not be saved on the SD card.
- SearchSuggestionProvider provides search suggestions based upon recent search queries for the map search dialog. For instance, if a user searches for “wellington” previously, then that query appears as a suggestion once he or she begins typing the same query.
Following shows the directory structure of res under AudioGeotagger.
All layouts of the user interface are placed under the res/layout package.
All images used in this app are placed under the res/drawable-hdpi package.
All background used for buttons and panels are placed under the res/drawable package.
4. File Management
The application stores all necessary files on the SD card storage. The audio files for the interviews are saved under /sdcard/Android/data/com.vuw.audiogeotagger/files. The storage.txt file records the information about all interviews including title, description, the paths of corresponding audio and xml. With respect to xml files, they are stored under /data/data/com.vuw.audiogeotagger/files, which is invisible to users in order to prevent the files from being modified by hand.
5. Data Format
The interactions between the users and map are recorded in an xml file. For example, when a user moves the map from one location to another location, the information about this action will be saved to the xml file such as the coordinates of the new location. An example of the xml file is shown as follows,
The rest of this section explains each element in the xml file in detail.
- title specifies the title of the interview.
- description specifies the description of the interview.
- audio specifies the path of the audio on the SD card.
- type indicates the type of the action, for example, initial_view describes the center coordinates of the map at the beginning of the interview.
- latitude provides the latitude of a particular point.
- longitude provides the longitude of a particular point.
- level specifies current Google map zoom level of the map.
- seconds measures the idle period between the last action and the current action.
- timestamp describes the date & time of the action.
- targetLatitude specifies the latitude of last position of the dragged marker. Note that this element is only for the action of type dragmarker.
- targetLongitude specifies the longitude of last position of the dragged marker. Note that this element is only for the action of type dragmarker.
Note: latitude and longitude are respectively expressed as an 8-digit integer due to that Google APIs use integers to construct GeoPoint objects.