2011-06-02 127 views
1

我想获取当前用户位置(经度和纬度),但onLocationChanged方法不会被称为 但其他方法如public void onProviderDisabled(String provider)。请帮忙,可能是什么问题? 我有一个类:gps没有获取用户位置

package com.javacodegeeks.android.lbs; 

import android.app.Activity; 
import android.os.Bundle; 

import android.app.Activity;  

import android.content.Context;  

import android.location.Location;  

import android.location.LocationListener;  

import android.location.LocationManager;  

import android.os.Bundle;  

import android.view.View;  

import android.view.View.OnClickListener;  

import android.widget.Button;  

import android.widget.Toast;  



public class LbsGeocodingActivity extends Activity {  



    private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters  

    private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; // in Milliseconds  



    protected LocationManager locationManager;  



    protected Button retrieveLocationButton;  



    @Override  

    public void onCreate(Bundle savedInstanceState) {  




    super.onCreate(savedInstanceState);  

    setContentView(R.layout.main);  



    retrieveLocationButton = (Button) findViewById(R.id.retrieve_location_button);  



    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  



    locationManager.requestLocationUpdates(  

      LocationManager.GPS_PROVIDER,  

      MINIMUM_TIME_BETWEEN_UPDATES,  

      MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,  

      new MyLocationListener()  

    );  



retrieveLocationButton.setOnClickListener(new OnClickListener() {  

     @Override  

     public void onClick(View v) {  

      showCurrentLocation();  

     }  

});    



}   



protected void showCurrentLocation() {  



    Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);  



    if (location != null) {  

     String message = String.format(  

       "Current Location \n Longitude: %1$s \n Latitude: %2$s",  

       location.getLongitude(), location.getLatitude()  

     );  

     Toast.makeText(LbsGeocodingActivity.this, message,  

       Toast.LENGTH_LONG).show();  

    }  



}   



private class MyLocationListener implements LocationListener {  



    public void onLocationChanged(Location location) {  

     String message = String.format(  

       "New Location \n Longitude: %1$s \n Latitude: %2$s",  

       location.getLongitude(), location.getLatitude()  

     );  

     Toast.makeText(LbsGeocodingActivity.this, message, Toast.LENGTH_LONG).show();  

    }  



    public void onStatusChanged(String s, int i, Bundle b) {  

     Toast.makeText(LbsGeocodingActivity.this, "Provider status changed",  

       Toast.LENGTH_LONG).show();  

    }  



    public void onProviderDisabled(String s) {  
     Toast.makeText(LbsGeocodingActivity.this,  

       "Provider disabled by the user. GPS turned off",  

       Toast.LENGTH_LONG).show();  

    }  



    public void onProviderEnabled(String s) {  

     Toast.makeText(LbsGeocodingActivity.this,  

       "Provider enabled by the user. GPS turned on",  

       Toast.LENGTH_LONG).show();  

    } 
} 
} 
+0

已经刺激了GPS坐标,通过DDMS模拟器或telnet命令。 – Dinash 2011-06-02 04:56:39

+0

嗨迪尼什我试着在设备上三星galexy s其他方法正在调用bt当我按下一个图标显示,gps正在搜索bt it剂量显示任何信息 – amrut1 2011-06-02 05:12:01

+0

它在它的工作正常仿真程序....如果是的话,检查互联网连接,并检查是否GPS启用...还检查GPS坐标是否被钩... – Dinash 2011-06-02 05:17:00

回答

0
public class HomeActivity extends Activity implements LocationListener{ 
public static Context mContext; 
private double latitude, longitude; 
public LocationManager mLocManager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    mContext=this; 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.homelayout); 


    mLocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    mLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, 
      this); 
    mLocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 
      0, this); 
    locationUpdate(); 
    ((Button) this.findViewById(R.id.ButtonHome)) 
      .setOnClickListener(new OnClickListener() { 
       public void onClick(View arg0) { 

         startActivity(new Intent(HomeActivity.this, 
           DefaultDisplay.class)); 

       } 
      }); 

    ((Button) this.findViewById(R.id.ButtonProfile)) 
      .setOnClickListener(new OnClickListener() { 

       public void onClick(View arg0) { 
        if (GUIStatics.boolLoginStatus) { 
         startActivity(new Intent(HomeActivity.this, 
           MyProfile.class)); 
        } else { 
         Intent intent=new Intent(HomeActivity.this, 
           Login.class); 
         intent.putExtra("moveTo","MyProfile"); 
         startActivity(intent); 
        } 
       } 
      }); 

    ((Button) this.findViewById(R.id.ButtonNotifications)) 
      .setOnClickListener(new OnClickListener() { 

       public void onClick(View arg0) { 
        if (GUIStatics.boolLoginStatus) { 
         startActivity(new Intent(HomeActivity.this, 
           ShowAllNotificationActiviry.class)); 
        } else { 
         Intent intent=new Intent(HomeActivity.this, 
           Login.class); 
         intent.putExtra("moveTo","ShowAllNotificationActiviry"); 
         startActivity(intent); 
        } 
       } 
      }); 

    ((Button) this.findViewById(R.id.ButtonFavorites)) 
      .setOnClickListener(new OnClickListener() { 

       public void onClick(View arg0) { 
        if (GUIStatics.boolLoginStatus) { 
         startActivity(new Intent(HomeActivity.this, 
           FavoritesActivity.class)); 
        } else { 
         Intent intent=new Intent(HomeActivity.this, 
           Login.class); 
         intent.putExtra("moveTo","FavoritesActivity"); 
         startActivity(intent); 
        } 
       } 
      }); 

      ((Button) this.findViewById(R.id.ButtonMore)) 
      .setOnClickListener(new OnClickListener() { 
       public void onClick(View arg0) { 
         startActivity(new Intent(HomeActivity.this, 
           MoreListActivity.class)); 
       } 
      }); 

} 

public void locationUpdate() 
{ 
    CellLocation.requestLocationUpdate(); 
} 


public void getAddress(double lat, double lng) { 
    Geocoder geocoder = new Geocoder(HomeActivity.mContext, Locale.getDefault()); 
    try { 
     List<Address> addresses = geocoder.getFromLocation(lat, lng, 1); 
     Address obj = addresses.get(0); 
     String add = obj.getAddressLine(0); 
     GUIStatics.currentAddress = obj.getSubAdminArea() + "," 
       + obj.getAdminArea(); 
     GUIStatics.latitude = obj.getLatitude(); 
     GUIStatics.longitude = obj.getLongitude(); 
     GUIStatics.currentCity= obj.getSubAdminArea(); 
     GUIStatics.currentState= obj.getAdminArea(); 
     add = add + "\n" + obj.getCountryName(); 
     add = add + "\n" + obj.getCountryCode(); 
     add = add + "\n" + obj.getAdminArea(); 
     add = add + "\n" + obj.getPostalCode(); 
     add = add + "\n" + obj.getSubAdminArea(); 
     add = add + "\n" + obj.getLocality(); 
     add = add + "\n" + obj.getSubThoroughfare(); 

     Log.v("IGA", "Address" + add); 
     // Toast.makeText(this, "Address=>" + add, 
     // Toast.LENGTH_SHORT).show(); 

     // TennisAppActivity.showDialog(add); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); 
    } 
} 



public void onLocationChanged(Location location) { 
    latitude = location.getLatitude(); 
    longitude = location.getLongitude(); 
    GUIStatics.latitude=location.getLatitude(); 
    GUIStatics.longitude= location.getLongitude(); 
    Log.v("Test", "IGA" + "Lat" + latitude + " Lng" + longitude); 
    //mLocManager.r 

    getAddress(latitude, longitude); 
    if(location!=null) 
    { 

    mLocManager.removeUpdates(this); 
    } 
    // Toast.makeText(this, "Lat" + latitude + " Lng" + longitude, 
    // Toast.LENGTH_SHORT).show(); 
} 


public void onProviderDisabled(String arg0) { 
    // TODO Auto-generated method stub 
    Toast.makeText(HomeActivity.this, "Gps Disabled", Toast.LENGTH_SHORT).show(); 
    Intent intent = new Intent(
      android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
    startActivity(intent); 
} 


public void onProviderEnabled(String arg0) { 
    // TODO Auto-generated method stub 

} 


public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
    if(arg1 == 
      LocationProvider.TEMPORARILY_UNAVAILABLE) { 
            Toast.makeText(HomeActivity.this, 
      "LocationProvider.TEMPORARILY_UNAVAILABLE", 
      Toast.LENGTH_SHORT).show(); 
         } 
         else if(arg1== LocationProvider.OUT_OF_SERVICE) { 
            Toast.makeText(HomeActivity.this, 
      "LocationProvider.OUT_OF_SERVICE", Toast.LENGTH_SHORT).show(); 
         } 

} 

} 这是我的代码我用这对于获取用户当前位置。 仔细阅读它,检查你在代码中犯的错误。 ,并检查与gps相关的mainfest文件中的所有权限。

<uses-permission android:name="android.permission.ACCESS_GPS" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

我希望这是帮助。

+0

嗨DynamicMind我创建的代码,它在模拟器工作正常我传递经纬度它显示它在日志BT时,当我尝试它在设备上它显示GPS搜索的图标,但没有显示在日志代码是 – amrut1 2011-06-02 06:35:55

+0

我运行该应用程序在bebug模式,它显示我的方法不在被叫 – amrut1 2011-06-02 06:52:33

+0

我得到更新为06-02 12:30:10.504:INFO/GpsLocationProvider(2474):requestRefLocation:gsm_cell = [41022,6733740] 06-02 12:30:10.504:INFO/GpsLocationProvider(2474):requestRefLocation :mcc = 404 mnc = 22 06-02 12:34:50.293:DEBUG/gps_BRCM(2474):on_location_cb():lat(18.608823),lon(73.713734),flags(0x00000000),精度(1669.000000)012-06-02 12:34:50.293:DEBUG/gps_BRCM(2474):on_satellite _cb(num_svs:0 used_in_fix_mask:0x00000000) – amrut1 2011-06-02 07:01:25

0

private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; //在米

更改为0 ....

0

只是扩展了GpsStatus.Listener您的活动。 类似如下: ublic类MyActivity实现LocationListener的, GpsStatus.Listener

,并检查您的权限: