【问题标题】:Android GSM location force updateAndroid GSM 位置强制更新
【发布时间】:2014-08-23 08:50:47
【问题描述】:

我的问题如下。 我想开发一个非常简单的 android 应用程序,它可以从 GSM/3G/LTS/等获取手机当前位置。网络。我知道有很多类似的问题,但对于我的问题我找不到任何答案。

所以我编写了这段代码,它运行良好,但是当我搬到我所在城市的另一个位置并再次获得我的坐标时,它们与我之前的位置相同。冷你帮我,不打电话,短信等怎么刷新。

(PS:我在Button Click事件中调用了_getLocation()方法)

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button = (Button) findViewById(R.id.toggleButton1);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            _getLocation();


        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}


double lat = 0;
double lon = 0;

LocationListener asd = new MyLocationListener();
Location loc;

private void _getLocation() 
{
    try 
    {   
        Criteria criteria = new Criteria();
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        String bestProvider = locationManager.getBestProvider(criteria, false);
        //Location location = locationManager.getLastKnownLocation(bestProvider);

        LocationManager fasz = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        fasz.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,10,0,this.asd);

    //Location asdasd =  fasz.getLastKnownLocation(bestProvider);

        Location asdasd=null;
        MyLocationListener kuki = new MyLocationListener();
        kuki.onLocationChanged(asdasd);

    Toast.makeText(this,  "Long: " + String.valueOf(asdasd.getLongitude()) + "    Lat: " + String.valueOf(asdasd.getLatitude()), Toast.LENGTH_LONG).show();

        //lat = location.getLatitude();
        //lon = location.getLongitude();

    } catch (Exception ex) {

        Toast.makeText(this, ex.toString(), Toast.LENGTH_LONG).show();

       // lat = -1.0;
       // lon = -1.0;
    }
}


final class MyLocationListener implements LocationListener {



@Override
public void onLocationChanged(Location locFromGps) {

}

@Override
public void onProviderDisabled(String provider) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

}

其他错误:

  • 我需要从 - onLocationChanged 中删除 @Override 文本 - onProviderDisabled - onProviderEnabled - onStatusChanged 方法。

  • 我从 requestSingleUpdate 方法中得到了另外两个错误。关于这些,我附上了两张图片。

第一个错误:

第二个错误:

【问题讨论】:

    标签: java android


    【解决方案1】:

    getLastKnownLocation() 返回最后一个已知位置,也就是不重新获取位置。

    您必须在活动开始/恢复时注册位置更新(onStartonResume),使用其中一种方法 LocationManager.requestLocationUpdates(...)(我建议活动实现 LocationListener), 每次调用 LocationListener.onLocationChanged(Location) 时保存新位置,并在按下按钮时使用保存的位置。

    另一个选项是单击按钮进行注册,然后等待位置更新,然后才显示祝酒词。

    public class MainActivity extends ActionBarActivity implements LocationListener {
    
    double lat = 0;
    double lon = 0;
    
    LocationListener asd = new MyLocationListener();
    Location loc;
    LocationManager locManager;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    
        Button button = (Button) findViewById(R.id.toggleButton1);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
    
                _getLocation();
    
    
            }
        });
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    
    
    private void _getLocation() 
    {
        try 
        {   
            this.loc = null;
            locManager.requestSingleUpdate(LocationManager.NETWORK_PROVIDER, this, null);
    
            // Waiting for the update
            while(loc == null);
    
            Toast.makeText(this,  "Long: " + loc.getLongitude() + "    Lat: " + loc.getLatitude(), Toast.LENGTH_LONG).show();
        } catch (Exception ex) {
            Toast.makeText(this, ex.toString(), Toast.LENGTH_LONG).show();
        }
    }
    
    
    @Override
    public void onLocationChanged(Location locFromGps) 
    {
        this.loc = locFromGps;
    }
    
    @Override
    public void onProviderDisabled(String provider) {
    
    }
    
    @Override
    public void onProviderEnabled(String provider) {
    
    }
    
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    
    }
    }
    

    【讨论】:

    • 我了解您的解决方案,但我对 Java 很陌生(我是 C# 人),所以您能给我一些示例或稍微编辑一下我的代码吗?
    • @Gabor 能否请您发布更多活动代码以便我进行编辑?
    • 我将问题中的代码修改为整个 MainActivity。 :)
    • 非常感谢,但我仍然遇到一些错误。冷你检查吗?我在帖子中添加了两张图片。
    • 你有没有注意到我在活动中添加了implements LocationListener
    【解决方案2】:

    如果您只想从网络读取位置更新,请尝试使用以下方法:

    requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)

    并将提供者作为 LocationManager.NETWORK_PROVIDER 传递

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 2011-02-14
      • 2017-04-06
      • 1970-01-01
      相关资源
      最近更新 更多