android - 为什么这段通过 GPS 获取位置的代码不起作用?

标签 android gps

即使启用了 GPS 并且所有位置管理器和监听器都已正确设置,我仍无法获取位置。这是我到目前为止所拥有的:

public class GpsTest extends Activity  {
     private TextView text; 
     private LocationManager manager; 
     private LocationListener listener;
     private  Location myLocation;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    text = (TextView)findViewById(R.id.textView1);
 try
 {
    manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    myLocation = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER); //"gps"
    text.setText(("Lat: " + myLocation.getLatitude() 
                + "\nLLong: " + myLocation.getLongitude())); 
    listener = new MyLocationListener(); 
    manager.requestLocationUpdates(
                                    LocationManager.GPS_PROVIDER, 
                                    0, 
                                    1, 
                                    listener);
    if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)){  
        Toast.makeText(this, "GPS is enable. ", Toast.LENGTH_SHORT).show();  
  }  
    else createGpsDisabledAlert();   
 }catch(Exception ex)
 {
     createGpsDisabledAlert(); 
 }
        } 


public void onclicklistener(View v){
    try
    {
      text.setText(("Lat: " + myLocation.getLatitude() 
              + "\nLLong: " + myLocation.getLongitude()));
    }catch(Exception ex)
    {
     Toast.makeText(this, "Error while getting locations. "+ex.toString(), Toast.LENGTH_SHORT).show();   
    }
  }
  private void createGpsDisabledAlert(){  
      AlertDialog.Builder builder = new AlertDialog.Builder(this);  
      builder.setMessage("GPS is disabled! Would you like to enable it?")  
           .setCancelable(false)  
           .setPositiveButton("Enable GPS",  
                new DialogInterface.OnClickListener(){  
                public void onClick(DialogInterface dialog, int id){  
                     showGpsOptions();  
                }  
           });  
           builder.setNegativeButton("No Thanks",  
                new DialogInterface.OnClickListener(){  
                public void onClick(DialogInterface dialog, int id){  
                     dialog.cancel();  
                }  
           });  
      AlertDialog alert = builder.create();  
      alert.show();  
      }   
  private void showGpsOptions(){  
      Intent gpsOptionsIntent = new Intent(  
              android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);  
      startActivity(gpsOptionsIntent);  
  }  



   private class MyLocationListener implements LocationListener{ 
                public void onLocationChanged(Location location) { 

                        // TODO Auto-generated method stub 
                        if (location != null){ 
                                text.setText(("Lat: " + location.getLatitude() 
                                        + "\nLLong: " + location.getLongitude())); 
                        } 
                        Toast.makeText(GpsTest.this, ""+location, Toast.LENGTH_SHORT).show();
                } 
                public void onProviderDisabled(String provider) { 
                        // TODO Auto-generated method stub 
                } 
                public void onProviderEnabled(String provider) { 
                        // TODO Auto-generated method stub

                }
                @Override
                public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
                    // TODO Auto-generated method stub

                } 
                } 
   public void onStatusChanged(String provider, int status, 
                Bundle extras) { 
                        // TODO Auto-generated method stub
                } 
 }

最佳答案

你必须像这样使用他的 run() 方法的线程(是西类牙语,我希望这对你来说不是问题)

@Override
public void run() {

    mLocationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);

    if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        Looper.prepare();
        mToast.Make(getContext(),"GPS",0);
        mLocationListener = new MyLocationListener();
        mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocationListener);
        Looper.loop(); 
        Looper.myLooper().quit(); 

    } else if (mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
        Looper.prepare();
        mToast.Make(getContext(),"Triangulacion",0);
        mLocationListener = new MyLocationListener();
        mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mLocationListener);
        Looper.loop();
        Looper.myLooper().quit();
    }else{
        mToast.Make(context,"No se encuentra señal se procede a mandar un mensaje normal",0);
        Looper.prepare();
        handlerNormal.sendEmptyMessage(0);
        Looper.loop();
        Looper.myLooper().quit();
    }   

}   

关于android - 为什么这段通过 GPS 获取位置的代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5673512/

相关文章:

Android检测汽车何时减速和 parking

ios - 试图从 UIImagePickerController 中提取 GPS 元数据,但 NSLog 显示为空

安卓输出错误。 TextView 不会显示输出

java - 如何根据对象属性将列表对象生成为多个列表?

android - 将页脚添加到 ListView 后崩溃

android - 如何像我们在 Android 应用程序中使用 Intent.ACTION_SEND 那样通过 iOS 应用程序中的其他应用程序共享内容/数据?

iphone - 将 GPS 坐标转换为坐标平面

android - GPS 应用程序的后台进程

android - 如何获得未过时的位置?

android - 定制组件或常规组合