patternjavaMinor
Locate user of an Android device
Viewed 0 times
locateuserdeviceandroid
Problem
I am new to oriented object paradigm and I work on Android using Java project for an internship.
I must be able to locate the user and some around buildings I read stuff about how to setup LocationListener and all, and decided that I better write a class that manage everything for me.
That is the first time I am writing a class on my own (without any pedagogic goal) and I ever seen an example with an interface nested to a class, I am wondering if this is even logical or totally absurd.
I am al
I must be able to locate the user and some around buildings I read stuff about how to setup LocationListener and all, and decided that I better write a class that manage everything for me.
public class NetCampusLocation {
private Activity activity;
private LocationManager locationManager;
private LocationListener locationListener;
private Location freshLocation;
public NetCampusLocation(Activity activity) {
this.activity = activity;
this.locationManager = (LocationManager) this.activity.getSystemService(Context.LOCATION_SERVICE);
this.locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
this.freshLocation = this.locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (this.freshLocation == null) {
this.freshLocation = this.locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
}
public void setLocationUpdate(String provider, int minTimeInterval, int minDistance, LocationListener listener) {
this.locationManager.requestLocationUpdates(provider, minTimeInterval, minDistance, listener);
}
public void stopLocationUpdate() {
this.locationManager.removeUpdates(this.locationListener);
}
}That is the first time I am writing a class on my own (without any pedagogic goal) and I ever seen an example with an interface nested to a class, I am wondering if this is even logical or totally absurd.
I am al
Solution
It is good practice to mark as many fields as possible as
I assume that
All fields that only get initialized once can be marked final.
You seem to only be using your
Also, instead of passing an
About this code:
It is totally fine to do it this way. This is an anonymous inner class. The alternative is to use an inner class (non-anonymous), this would reduce code from your constructor but that code would be added in other parts of the class instead so which way you go doesn't matter much. This is fine.
final.private final Activity activity;
private final LocationManager locationManager;
private final LocationListener locationListener;I assume that
freshLocation will be changed in your locationListener so that one should not be final.All fields that only get initialized once can be marked final.
You seem to only be using your
activity inside the constructor, so you don't need to keep that as a field at all.Also, instead of passing an
Activity, it's enough to pass a Context (Activity extends Context so you can still pass an activity). The only method you use on the activity is getSystemService which is part of the Context class. Contexts are often required to pass to various methods in Android, so that is perfectly fine. It is better to pass a Context than an Activity.About this code:
this.locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {It is totally fine to do it this way. This is an anonymous inner class. The alternative is to use an inner class (non-anonymous), this would reduce code from your constructor but that code would be added in other parts of the class instead so which way you go doesn't matter much. This is fine.
Code Snippets
private final Activity activity;
private final LocationManager locationManager;
private final LocationListener locationListener;this.locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {Context
StackExchange Code Review Q#57202, answer score: 4
Revisions (0)
No revisions yet.