Sir,
thanks for your help, here is the complete code of my program.
hi I am getting error "cannot resolve method locationmanager.requestLocationUpdates();
public class MainActivity extends Activity implements LocationListener {
public Button button;
private TextView textView;
public LocationManager locationmanager;
Context context;
private double lat,lon;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationmanager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
button = (Button) findViewById(R.id.button);
textView = (TextView) findViewById(R.id.textView);
button.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
//error !!!!!!
**Error ** locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER,5000,0,this);
}
});
}
#Override
public void onLocationChanged(Location location) {
if(location!=null)
{
lat=location.getLatitude();
lon=location.getLongitude();
textView.append("\n lat:"+lat+" lon:"+lon);
}
}
#Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
#Override
public void onProviderEnabled(String provider) {
}
#Override
public void onProviderDisabled(String provider) {
}
}
First, do not use "gps". Use LocationManager.GPS_PROVIDER.
Second, this does not match any signature for requestLocationUpdates(). this is a View.OnClickListener, not a LocationListener or a PendingIntent.
If this code is from an activity or fragment, and that activity or fragment is implementing LocationListener, this MyActivity.this instead of this, where MyActivity is the name of the activity or fragment that is implementing LocationListener.
Related
project structure
I am trying to getContentResolver in MyLocationListenerActivity for accessing the data base which is implemented as LogContentProvider here. I have registered the MyLocationListenerActivity to the locationManager in MainActivity.
public class MainActivity extends AppCompatActivity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void trackingServiceButtonOnClick(View v) {
startActivity(new Intent(MainActivity.this,
MyLocationListenerActivity.class));
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
MyLocationListenerActivity myLocationListener = new MyLocationListenerActivity();
try {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1, 1, myLocationListener);
} catch (SecurityException e) {
Log.d("debug", e.toString());
}
if (getContentResolver() != null) {
Log.d("debug", "I can get content resolver");
}
}
and in MyLocationListenerActivity, If I want to getContentResolver() in onCreate(), that's fine, but If I try to getContentResolver in onLocationChanged, a error "get contentResolver() on a null object reference occurs", does anyone know why this happens?
public class MyLocationListenerActivity extends AppCompatActivity implements LocationListener {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_location_listener);
// test() works fine here
test();
}
public void test() {
getContentResolver();
}
#Override
public void onLocationChanged(Location location) {
// error will happen here
test();
}
#Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
#Override
public void onProviderEnabled(String provider) {
}
#Override
public void onProviderDisabled(String provider) {
}
It seems like my onClick is malfunctioning, the text won't change when I click it and the button is still enabled after a click.
I'm trying to get a button that (when pressed by the user) updates the location.
Here's my code:
public class Search extends ActionBarActivity {
private double[][] values_gps = new double[100][1];
private Location location;
private TextView textLat;
private TextView textlong;
private Context mContext;
private double CurrentLatitude = 0;
private double CurrentLongitude = 0;
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener ll = new myLocationListener();
Button refresh = (Button) findViewById(R.id.button);
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
textLat = (TextView)findViewById(R.id.Lat);
textlong = (TextView)findViewById(R.id.Long);
refresh.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
refresh.setEnabled(false);
refresh.setText("SEARCHING");
}
});
}
class myLocationListener implements LocationListener{
#Override
public void onLocationChanged(Location location) {
textLat.setText(Double.toString(location.getLatitude()));
textlong.setText(Double.toString(location.getLongitude()));
lm.removeUpdates(ll);
refresh.setEnabled(true);
refresh.setText("SEARCH");
}
#Override
public void onProviderDisabled(String provider) {
}
#Override
public void onProviderEnabled(String provider) {
}
#Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
}
Button refresh = (Button) findViewById(R.id.button);
must be called after setContentView
My own android app isn't providing me with anymore GPS location updates. I've tried to build the simplest app possible and it's still not working. There's a blinking GPS icon in the status bar (so the GPS can't be turned off correct?), however I don't get locationChanged updates.
I have absolutely no clue what the problem is.
Manifest includes this:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Mainactivity.java
public class MainActivity extends ActionBarActivity {
private LocationManager locationManager;
TextView textView;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
textView.setText(location.getLatitude() + " " + location.getLongitude());
}
public void onStatusChanged(String provider, int status, Bundle extras) { }
public void onProviderEnabled(String provider) { }
public void onProviderDisabled(String provider) { }
};
}
Change Activity to also implement LocationListener.
public class MainActivity extends ActionBarActivity implements LocationListener{
take the functions out of inner class, change the locationListener to this.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0
, this); //note changed last parameter to this.
}
//The following methods were inside the inner class. They were not created in time
//for oncreate to requestLocationUpdates.
public void onLocationChanged(Location location) {
textView.setText(location.getLatitude() + " "
+ location.getLongitude());
}
public void onStatusChanged(String provider, int status, Bundle extras) { }
public void onProviderEnabled(String provider) { }
public void onProviderDisabled(String provider) { }
Try that and see if it works better. The Activity itself is now a LocationListener, and the updates will come to this class.
Still being relatively new to this I'm having issues in finding a view in a non-activity class MyLocation which I'm using in my activity class MainActivity. I'm using MyLocation to get longitude and latitude.
I want to highlight a textview when either GPS or Network has been used. To do so I need to find the textviews in the non-activity class MyLocation.
Here is how I'm calling it in MainActivity:
public class MainActivity extends ActionBarActivity implements LocationListener {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyLocation myLocation = new MyLocation();
myLocation.getLocation(this, locationResult);
}
And here what I tried in MyLocation to find the textviews:
public class MyLocation {
LocationManager lm;
LocationResult locationResult;
private Context context;
TextView tvnetwork, tvgps;
private int defaultTextColor;
LocationListener locationListenerNetwork = new LocationListener() {
public void onLocationChanged(Location location) {
locationResult.gotLocation(location);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.main, null);
tvnetwork = (TextView) v.findViewById(R.id.tvnetwork);
tvgps = (TextView) v.findViewById(R.id.tvgps);
defaultTextColor = tvgps.getTextColors().getDefaultColor();
tvnetwork.setTextColor(context.getResources().getColor(
R.color.green));
tvgps.setTextColor(defaultTextColor);
lm.removeUpdates(this);
lm.removeUpdates(locationListenerGps);
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
But the views are not found. I already get a NPE # .getSystemService(Context.LAYOUT_INFLATER_SERVICE);. What am I doing wrong?
get a NPE # .getSystemService(Context.LAYOUT_INFLATER_SERVICE);. What
am I doing wrong?
Because context is null in MyLocation class. use MyLocation class constructor to pass MainActivity context in MyLocation to access system services as:
Activity activity;
public MyLocation(Context context,Activity activity){
this.context=context;
this.activity=activity;
}
and in MainActivity create MyLocation class object by passing MainActivity context as:
MyLocation myLocation = new MyLocation(MainActivity.this,this);
Now use context to access system services in MyLocation class
EDIT: Instead of inflating main layout again in onLocationChanged use Activity context to access view from Activity Layout as:
public void onLocationChanged(Location location) {
....
tvnetwork = (TextView) activity.findViewById(R.id.tvnetwork);
tvgps = (TextView) activity.findViewById(R.id.tvgps);
defaultTextColor = tvgps.getTextColors().getDefaultColor();
tvnetwork.setTextColor(context.getResources().getColor(
R.color.green));
tvgps.setTextColor(defaultTextColor);
....
}
Try this way,hope this will help you to solve your problem.
public class MainActivity extends ActionBarActivity implements LocationListener {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyLocation myLocation = new MyLocation(this);
myLocation.getLocation(this, locationResult);
}
}
public class MyLocation {
LocationManager lm;
LocationResult locationResult;
private Context context;
TextView tvnetwork, tvgps;
private int defaultTextColor;
public void MyLocation(Context context) {
this.context = context;
}
LocationListener locationListenerNetwork = new LocationListener() {
public void onLocationChanged(Location location) {
locationResult.gotLocation(location);
View v = LayoutInflater.from(context).inflate(R.layout.main, null);
tvnetwork = (TextView) v.findViewById(R.id.tvnetwork);
tvgps = (TextView) v.findViewById(R.id.tvgps);
defaultTextColor = tvgps.getTextColors().getDefaultColor();
tvnetwork.setTextColor(context.getResources().getColor(
R.color.green));
tvgps.setTextColor(defaultTextColor);
lm.removeUpdates(this);
lm.removeUpdates(locationListenerGps);
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
}
Why you want to do it in separate class as your are implementing "LocationListener" in Activity itself. And if you want to do in separate class. You can notify the activity by setting custom listners like this
public class MainActivity extends ActionBarActivity implements LocationListener,CustomListner {
TextView tvnetwork, tvgps;
private int defaultTextColor;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvnetwork = (TextView) v.findViewById(R.id.tvnetwork);
tvgps = (TextView) v.findViewById(R.id.tvgps);
defaultTextColor = tvgps.getTextColors().getDefaultColor();
MyLocation myLocation = new MyLocation(this); // pass listner in constructor
myLocation.getLocation(this, locationResult);
}
#Override
public void highlight(){
// update your view here.
tvnetwork.setTextColor(context.getResources().getColor(
R.color.green));
tvgps.setTextColor(defaultTextColor);
}
public class MyLocation {
LocationManager lm;
LocationResult locationResult;
CustomListner listner;
MyLocation(CustomListner listner){
this.listner = listner;
}
public interface CustomListner{
public void highlight();
}
LocationListener locationListenerNetwork = new LocationListener() {
public void onLocationChanged(Location location) {
locationResult.gotLocation(location);
listner.highlight();
lm.removeUpdates(this);
lm.removeUpdates(locationListenerGps);
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
}
im a bit desperate because somehow, my code just stopped working.
Code:
public class MainBoard extends FragmentActivity implements OnClickListener, OnTouchListener, LocationListener {
#Override
protected void onCreate(Bundle savedInstanceState) {
//Location Listener
current_location = new MarkerOptions();
current_location.icon(BitmapDescriptorFactory.fromResource(R.drawable.location));
LocationManager locationManager = (LocationManager)getSystemService(getApplicationContext().LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1, 1, this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1, 1, this);
}
//LocationListener
#Override
public void onLocationChanged(Location location) {
Log.d("LocationListener", "LocationChanged");
updateCurrentLocation(location);
}
#Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
#Override
public void onProviderEnabled(String provider) {
Log.d("LocationListener", "onProviderEnabled");
instantiatePosition();
}
#Override
public void onProviderDisabled(String provider) {
Log.d("LocationListener", "onProviderDisabled");
showGPSOfflineAlert();
}
}
I can't really see the error here, LogCat doesn't report any error, but no method is called, not even onProviderEnabled or onProviderDisabled...
Thanks in advance :)