LocationManager在实际设备上不工作

问题描述:

我有这个问题。我正在获取位置更新。它在我的模拟器上工作正常。但是当我在我的设备上测试它时,它显示当前位置正常。但是当我改变我的位置时,它不会在我的位置显示我的更新。但它在仿真器上工作正常。 这里是我的代码 Main.javaLocationManager在实际设备上不工作

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.AlertDialog.Builder; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.content.Intent; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Main extends Activity { 

    TextView tvStatus; 
    LocationManager lm; 
    boolean gpsEnabled; 
    LocationListener ls = new LocationListener() { 

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

     @Override 
     public void onProviderEnabled(String provider) {} 

     @Override 
     public void onProviderDisabled(String provider) {} 

     @Override 
     public void onLocationChanged(Location location) { 
      tvStatus.setText("Latitude: " 
        + location.getLatitude() + "\nLongitude: " 
        + location.getLongitude()); 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toast.makeText(this, "on create", 300).show(); 
     tvStatus = (TextView) findViewById(R.id.textView1); 
     lm = (LocationManager) getSystemService(LOCATION_SERVICE); 
    } 
    @Override 
    protected void onResume() { 
     super.onResume(); 
     Toast.makeText(this, "on resume", 200).show(); 
     if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      Location l = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
      tvStatus.setText(l.getLatitude()+" "+ l.getLongitude()); 
      lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ls); 
     }else{ 
      //use network provider 
      Toast.makeText(this, "dsfdsfdsfdsf", 300).show(); 
     } 
    } 
    @Override 
    protected void onPause() { 
     super.onPause(); 
     Toast.makeText(this,"on pause" ,300).show(); 
     lm.removeUpdates(ls); 
    } 

} 

我添加了所有permisions在我的manifest.xml

+0

也许一些记录是为了?... –

首先,请确保您的GPS已启用,信号锁定/固定在实际设备上。如果问题仍然存在,请在OnCreate()中初始化您的locationlistener而不是在类中。

+0

gps已启用。因为当我的应用程序启动时,它显示了我通过'locationManager.getLastKnownLocation()'得到的当前位置。当我改变它不显示变化。它在仿真器上运行良好 –

如果您在建筑物内,我的建议是不要使用GPS_PROVIDER,因为gps在建筑物内部不起作用,或者在进行位置修复时需要大量时间。