Contribution:
mobileAndroid
Headline
Advanced Technology:Android programming
Motivation
The implementation demonstrates advanced style of Technology:Android programming using the Technology:Android SDK and the Technology:Android Development Tool. The application uses other approaches compared to the two other implementations simpleAndroid and richerAndroid. This application is intended for employees. It aims to track his worked time. At the end of the month the Employee get an approximate salary expectation. It uses the geolocation feature by checking into a Android Service which is a background application to determine whether the employee is in the workplace. The time difference between the last and current review is added to the working hours.
The application demonstrates how to use...
- ... different activities and layouts like the Tab activity.
- ... the export and import features.
- ... a Android Service which is a background application.
- ... the connectivity manager and location listener
- ... a Map view with different overlays
- ... the toggle button or table layout which are different views
- ... Android preferences
Illustration
AppWidget
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="147dip"
android:minHeight="72dip"
android:initialLayout="@layout/main"
/>
In the XML-Code we define the default properties of our AppWidget. In line three and four we define the size of the AppWidget-Layout and in line five we define the Layout of the AppWidget.
public class CompanyWidget extends AppWidgetProvider{
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
...
appWidgetManager.updateAppWidget(appWidgetIds, views);
}
In the class CompanyWidget we update the AppWidget
TabActivity
intent = new Intent().setClass(this, GeneralSettings.class);
spec = tabHost.newTabSpec("general").setIndicator("General",
res.getDrawable(android.R.drawable.ic dialog map))
.setContent(intent);
tabHost.addTab(spec);
// Do the same for the other tabs
...
tabHost.setCurrentTab(1);
In line one we create an Intent to launch an Activity for the tab. In line two till five we initialize a TabSpec for each tab and add it to the TabHost. In the last line we set our default TabSpec.
Manager & Provider
lManager = (LocationManager) getSystemService(LOCATION SERVICE);
cManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY SERVICE);
We use the system services Location Manager and Connectivity Manager to get the status of GPS and internet connection.
Service
Intent i = new Intent(this, WorkService.class);
i.putExtra("profile", profile);
startService(i);
In line one we create an Intent with the Service Class. In line two we put the profile object in the intent and in line three we start the Service.
Geolocation
if(gps enabled) {
lManager.requestLocationUpdates(LocationManager.GPS PROVIDER, UPDATE TIME, 0, updateListenerForGPS);
}
else
if(network enabled)
lManager.requestLocationUpdates(LocationManager.NETWORK PROVIDER, UPDATE TIME, 0, updateListenerForNetwork);
In line two and five we start the requests for the location.
private LocationListener updateListenerForGPS = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
lManager.removeUpdates(updateListenerForNetwork);
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onLocationChanged(Location location) {
...
profile.addWorkedTime((double)(actualTime-lastUpdateTime)/60000);
...
}
};
In line twelve we get in the onLocationChanged-method the current location. We use it, to look if the Employee is in the company. If he is then he get in line 14 a salary increase.
Map view & Overlay
Map view
<RelativeLayout
...>
<com.google.android.maps.MapView
android:id="@+id/mv google map"
...
android:apiKey="@string/map key"/>
</relativelayout>
In line 4 we give the Map view an ID. In line 6 we use a map key. Here you find more information about the Map key. We show the Map in a MapActivity.
Overlay
We use two overlays in our implementation. The MapActivity constructs an rectangle with the CompanyOverlay and the MyLocationOverlay is a standard Android overlay to draw your own position.
MapView mView;
List<Overlay> mapOverlays;
MyLocationOverlay myLocationOverlay;
...
myLocationOverlay = new MyLocationOverlay(this, mView);
...
mView.getOverlays().add(myLocationOverlay);
In line 5 we create a MyLocationOverlay. In line 7 we get a list with overlays and we add the created mylocationOverlay to draw our position.
Preferences
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory>
<Preference android:key="profile" />
</preferencecategory>
</preferencescreen>
In line three we define the key for the preference.
private SharedPreferences settings;
...
settings = getSharedPreferences(getPackageName()+" preferences", MODE PRIVATE);
...
settings.edit().putInt("profile", pos).commit();
...
settings.getInt("profile", 0);
In line three we get the preference-object. In line five we edit the preference with putInt(key,value) and we commit the changes. In line seven we get the value with getInt(key,default).
Architecture
- In the package org.softlang.company.mobileAndroid we define the app widget provider and the tab activities.
- In strings.xml we specify the Strings of the Application.
- In layout we define various layouts of the different views.
- In the package org.softlang.company.services we implement the Android Service.
- In the package org.softlang.company.location we demonstrate the map view and overlay.
- In the package org.softlang.company.data we define the profile class and the xml Parser to import and export the data.
- In widget provider.xml company widget provider.xml we have settings for the AppWidget.
- In settings.xml we have the Android Preference xml-file.
Usage
- See Usage of simpleAndroid.
- If you want to use the Google map view, then you need to follow these the google maps android api v2 instructions during development.
There are no revisions for this page.
User contributions
User edits
Syntax for editing wiki
For you are available next options:will make text bold.
will make text italic.
will make text underlined.
will make text striked.
will allow you to paste code headline into the page.
will allow you to link into the page.
will allow you to paste code with syntax highlight into the page. You will need to define used programming language.
will allow you to paste image into the page.
is list with bullets.
is list with numbers.
will allow your to insert slideshare presentation into the page. You need to copy link to presentation and insert it as parameter in this tag.
will allow your to insert youtube video into the page. You need to copy link to youtube page with video and insert it as parameter in this tag.
will allow your to insert code snippets from @worker.
Syntax for editing wiki
For you are available next options:will make text bold.
will make text italic.
will make text underlined.
will make text striked.
will allow you to paste code headline into the page.
will allow you to link into the page.
will allow you to paste code with syntax highlight into the page. You will need to define used programming language.
will allow you to paste image into the page.
is list with bullets.
is list with numbers.
will allow your to insert slideshare presentation into the page. You need to copy link to presentation and insert it as parameter in this tag.
will allow your to insert youtube video into the page. You need to copy link to youtube page with video and insert it as parameter in this tag.
will allow your to insert code snippets from @worker.