1

如果 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());
        }
    }

}
4

3 回答 3

0

在室内,您可以使用 NetworkProvider 获取位置。此方法使用移动信号塔信息和附近 wifi 基站信息的组合来估算您的位置。

它的方法是扫描该区域的 wifi 基站并从附近的蜂窝塔收集移动运营商的蜂窝塔信息。然后它将所有这些数据发送到服务器并要求服务器估计您的位置。

如果您无法访问 Internet(即:没有 wifi 连接和移动数据连接),那么您将不会获得任何位置信息。对此你无能为力。这就是它的工作方式。

于 2012-05-30T16:54:00.140 回答
0

您将需要某种输入来检索位置。你的计算必须基于某些东西。根据您的手机硬件,您可以尝试使用蓝牙、NFC 或尝试检测发射器发出的某些频率(必须放置在该位置)。我希望这可以帮助你。

于 2012-05-30T16:54:04.773 回答