В моем приложении для Android я хочу использовать как поставщика GPS, так и сетевого провайдера для обновления местоположения в течение 5 секунд. Во-первых, я хотел бы использовать GPS-провайдера (потому что он дает точные результаты), и если поставщик GPS вернет широту и долготу в 0.0 и 0.0, я хочу использовать сетевой провайдер, но я не хочу использовать обоих поставщиков одновременно. Какие-либо предложения?Как использовать GPS и сетевой провайдер для получения текущих значений Локатор и долгота в Android
Q
Как использовать GPS и сетевой провайдер для получения текущих значений Локатор и долгота в Android
4
A
ответ
8
package loca.loca;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;
public class LocationActivity extends Activity {
double x,y;
Timer timer;
LocationManager lm;
boolean gps_enabled = false;
boolean network_enabled = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!gps_enabled && !network_enabled) { Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "nothing is enabled", duration);
toast.show();
}
if (gps_enabled)
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
locationListenerGps);
if (network_enabled)
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
locationListenerNetwork);
timer=new Timer();
timer.schedule(new GetLastLocation(), 20000);
}
LocationListener locationListenerGps = new LocationListener() {
public void onLocationChanged(Location location) {
timer.cancel();
x =location.getLatitude();
y = location.getLongitude();
lm.removeUpdates(this);
lm.removeUpdates(locationListenerNetwork);
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "gps enabled "+x + "\n" + y, duration);
toast.show();
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
LocationListener locationListenerNetwork = new LocationListener() {
public void onLocationChanged(Location location) {
timer.cancel();
x = location.getLatitude();
y = location.getLongitude();
lm.removeUpdates(this);
lm.removeUpdates(locationListenerGps);
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "network enabled"+x + "\n" + y, duration);
toast.show();
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
class GetLastLocation extends TimerTask {
@Override
public void run() {
lm.removeUpdates(locationListenerGps);
lm.removeUpdates(locationListenerNetwork);
Location net_loc=null, gps_loc=null;
if(gps_enabled)
gps_loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(network_enabled)
net_loc=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
//if there are both values use the latest one
if(gps_loc!=null && net_loc!=null){
if(gps_loc.getTime()>net_loc.getTime())
{x = gps_loc.getLatitude();
y = gps_loc.getLongitude();
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "gps lastknown "+x + "\n" + y, duration);
toast.show();
}
else
{x = net_loc.getLatitude();
y = net_loc.getLongitude();
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "network lastknown "+x + "\n" + y, duration);
toast.show();
}
}
if(gps_loc!=null){
{x = gps_loc.getLatitude();
y = gps_loc.getLongitude();
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "gps lastknown "+x + "\n" + y, duration);
toast.show();
}
}
if(net_loc!=null){
{x = net_loc.getLatitude();
y = net_loc.getLongitude();
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "network lastknown "+x + "\n" + y, duration);
toast.show();
}
}
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, "no last know avilable", duration);
toast.show();
}
}}
0
Venkat Check this
Вы можете также использовать критерии для получения наилучшего результата определения местоположения в соответствии с вашими потребностями
+1
ссылка больше не работает. –
1
public class MyLocation {
Timer timer1;
LocationManager lm;
LocationResult locationResult;
boolean gps_enabled=false;
boolean network_enabled=false;`
public boolean getLocation(Context context, LocationResult result)
{
//I use LocationResult callback class to pass location value from MyLocation to user code.
locationResult=result;
if(lm==null)
lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
//exceptions will be thrown if provider is not permitted.
try{gps_enabled=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){}
try{network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){}
//don't start listeners if no provider is enabled
if(!gps_enabled && !network_enabled)
return false;
try{
if(gps_enabled)
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps);
if(network_enabled)
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);
timer1=new Timer();
timer1.schedule(new GetLastLocation(), 30000);
}catch(Exception x){
return false;
}
return true;
}
LocationListener locationListenerGps = new LocationListener() {
public void onLocationChanged(Location location) {
timer1.cancel();
locationResult.gotLocation(location);
lm.removeUpdates(this);
lm.removeUpdates(locationListenerNetwork);
}
public void onProviderDisabled(String provider) {}
public void onProviderEnabled(String provider) {}
public void onStatusChanged(String provider, int status, Bundle extras) {}
};
LocationListener locationListenerNetwork = new LocationListener() {
public void onLocationChanged(Location location) {
timer1.cancel();
locationResult.gotLocation(location);
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) {}
};
class GetLastLocation extends TimerTask {
@Override
public void run() {
lm.removeUpdates(locationListenerGps);
lm.removeUpdates(locationListenerNetwork);
Location net_loc=null, gps_loc=null;
if(gps_enabled)
gps_loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(network_enabled)
net_loc=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
//if there are both values use the latest one
if(gps_loc!=null && net_loc!=null){
if(gps_loc.getTime()>net_loc.getTime())
locationResult.gotLocation(gps_loc);
else
locationResult.gotLocation(net_loc);
return;
}
if(gps_loc!=null){
locationResult.gotLocation(gps_loc);
return;
}
if(net_loc!=null){
locationResult.gotLocation(net_loc);
return;
}
locationResult.gotLocation(null);
}
}
public static abstract class LocationResult{
public abstract void gotLocation(Location location);
}
}
затем использовать их в своей деятельности:
final MyLocation myLocation = new MyLocation();
Handler mHandler = new Handler(Looper.getMainLooper());
mHandler.post(new Runnable() {
public void run() {
locationResult = new LocationResult(){
@Override
public void gotLocation(final Location location){
//Got the location!
try{
Methods.savePre(context, ""+location.getLatitude(), "LATITUDE");
Methods.savePre(context, ""+location.getLongitude(), "LONGITUDE");
}catch(Exception x){
x.getMessage();
}
Got_loc= true;
// String geoAddress = "geo:" + location.getLatitude() + ","+ location.getLongitude() + "?z=15";
// Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(geoAddress));
// context.startActivity(intent);
}
};
myLocation.getLocation(context, locationResult);
}
});
while(!Got_loc){
Thread.sleep(150);
}
Loc = Methods.getPref(context, "LATITUDE") + "%%" + Methods.getPref
Смежные вопросы
- 1. Как найти Локатор и долгота
- 2. Локатор и долгота Android с отсутствием GPS или названия города
- 3. Невозможно получить GPS Локатор и долгота местоположения текущего местоположения Android
- 4. Локатор и долгота Возврат Null
- 5. Локатор и долгота Java
- 6. Сетевой провайдер в android?
- 7. Android gps-провайдер и значок gps
- 8. Локатор и долгота не получены
- 9. CLLocationCoordinate2D Локатор и долгота NSString
- 10. Быстрое обновление Локатор и долгота
- 11. Локатор и долгота не отображаются
- 12. вопросов, чтобы получить Локатор с использованием сети и провайдера GPS
- 13. Локатор и долгота для названия места или города в .NET
- 14. Извлечь и сохранить Локатор/Долгота API
- 15. Локатор и долгота от веб-служб
- 16. Локатор и долгота с использованием Xpath
- 17. Локатор/долгота Qt4 виджет?
- 18. Локатор и долгота для автозаполнения поиска google API в ios
- 19. Как долгота и долгота в android
- 20. LocationListener Сетевой провайдер не называется
- 21. Сетевой провайдер Android, нужен интернет?
- 22. Как определить поставщика местоположения? GPS или сетевой провайдер
- 23. Android - долгота и широта от GPS против сети
- 24. Локатор и долгота через скрипт на стороне сервера (не js)
- 25. GPS Широта и долгота от шестнадцатеричного значения
- 26. GPS-путевая точка широта и долгота
- 27. Codename один провайдер GPS и текущее местоположение
- 28. GPS-долгота и широта через SMS-прослушиватель
- 29. неправильная широта и долгота с использованием gps
- 30. Как получить Локатор/Долгота из веб-приложения?
Есть ли причина, по которой вы используете другой LocationListener для этих двух? Могу я просто использовать его и проверить на 'onLocationChange()' какой провайдер он использует? – dee
Должны использоваться разные объекты LocationListener для каждого поставщика местоположения. В противном случае будет использоваться последний назначенный поставщик. – Alex