Я хочу найти свое текущее местоположение, если GPS не доступен, и нет беспроводной связи? Я думаю, мне нужно сделать некоторые вычисления или есть некоторые коды, которые он может сделать для меня.?
Спасибо.
Я написал, как этот код, но он не может найти текущее местоположение, когда я в помещении.
package com.anil.bestlocation;
import java.util.List;
import android.app.Activity;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.widget.TextView;
public class showBestLocation extends Activity implements LocationListener{
/** Called when the activity is first created. */
private static final String[] S = { "Out of Service",
"Temporarily Out of Service",
"Available" };
private TextView output;
private LocationManager locationManager;
private String bestProvider;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
output = (TextView) findViewById(R.id.txtLoc);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
//list all providers
List<String> providers = locationManager.getAllProviders();
for(String provider : providers){
printProvider(provider);
}
Criteria criteria = new Criteria();
bestProvider = locationManager.getBestProvider(criteria, false);
output.append("\n\nBEST PROVIDER:\n");
printProvider(bestProvider);
output.append("Location.. (initialized with the last known location):");
Location location = locationManager.getLastKnownLocation(bestProvider);
printLocation(location);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
locationManager.removeUpdates(this);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
locationManager.requestLocationUpdates(bestProvider, 20000, 1, this);
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
printLocation(location);
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
output.append("\n\nSProvider Disabled: " + provider);
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
output.append("\n\nProvider Enabled: " + provider);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
output.append("\n\nProvider Status Changed: " + provider +
", Status= " + S[status]);
}
private void printProvider(String provider){
LocationProvider info = locationManager.getProvider(provider);
output.append(info.toString() + "\n\n");
}
private void printLocation(Location location){
if(location == null){
output.append("\nLocation UNKNOWN\n\n");
}
else{
output.append("\n\nLatitude: " + location.getLatitude() + "\nLongitude: " + location.getLongitude());
}
}
}
В помещении вы можете использовать NetworkProvider для получения местоположения. Этот метод использует комбинацию информации о ячейке сотовой ячейки и информации о ближайшей базовой станции Wi-Fi для приближения вашего местоположения.
То, как это делается, - это сканирование области для базовых станций Wi-Fi и сбор информации о ячейке сотового оператора мобильной связи от ближайших сотовых вышек. Затем он отправляет все эти данные на сервер и просит сервер оценить ваше местоположение.
Если у вас нет доступа к Интернету (т.е. Нет подключения к Wi-Fi и никакого мобильного подключения к данным), вы не получите никакой информации о местоположении. Вы ничего не можете с этим поделать. Это так, как это работает.
bestProvider
без каких-либо критериев. Какой поставщик вы получаете в качестве лучшего поставщика? Если вы хотите получить как местоположения GPS, так и сетевые местоположения, вам нужно будет вызывать requestLocationUpdates()
дважды, один раз для каждого провайдера.
http://developer.android.com/guide/topics/location/obtaining-user-location.html
Более конкретно: http://developer.android.com/guide/topics/location/obtaining-user-location.html#BestPerformance
Для получения местоположения вам понадобится какой-то вход. Ваши расчеты должны основываться на чем-то. В зависимости от вашего аппаратного обеспечения телефона вы можете попробовать использовать bluetooth, NFC или попробовать и обнаруживать некоторую частоту, которая излучается передатчиком (это должно быть размещено в месте). Я надеюсь, это поможет вам.