android中的Gps定位

android中的Gps定位,android,Android,我正在使用LocationManager获取android中的当前位置 mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); GPS_提供程序作为服务提供。执行时,它返回null并在日志中连续显示以下内容 V/libgps(116):延迟操作线程pthread\u cond\u等待返回 提前感谢。测试此代码,如果成功,请告诉我 LocationManager locatio

我正在使用LocationManager获取android中的当前位置

 mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); 
GPS_提供程序作为服务提供。执行时,它返回null并在日志中连续显示以下内容

V/libgps(116):延迟操作线程pthread\u cond\u等待返回


提前感谢。

测试此代码,如果成功,请告诉我

LocationManager locationManager;
String context = Context.LOCATION_SERVICE;
locationManager = (LocationManager)getSystemService(context);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
String provider = locationManager.getBestProvider(criteria, true);

Location location = locationManager.getLastKnownLocation(provider);

updateWithNewLocation(location);

locationManager.requestLocationUpdates(provider, 2000, 10,   
                                       locationListener);
}

private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
  updateWithNewLocation(location);
}

public void onProviderDisabled(String provider){
  updateWithNewLocation(null);
}

public void onProviderEnabled(String provider){ }
public void onStatusChanged(String provider, int status, 
                            Bundle extras){ }
};
并使用以下权限:

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

这两个在马那边很好用。。你应该试试这些

公共类HomeActivity扩展活动实现LocationListener{
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(); 
                        } 

}
公共静态语境; 私人双纬度、经度; 公共场所经理; @凌驾 创建时受保护的void(Bundle savedInstanceState){ mContext=这个; super.onCreate(savedInstanceState); setContentView(R.layout.homelayout); mLocManager=(LocationManager)getSystemService(Context.LOCATION\u服务); mLocManager.RequestLocationUpdate(LocationManager.GPS_提供程序,0,0, 这),; mLocManager.RequestLocationUpdate(LocationManager.NETWORK_提供程序,0, 0,这个); 位置更新(); ((按钮)this.findviewbyd(R.id.ButtonHome)) .setOnClickListener(新的OnClickListener(){ 公共void onClick(视图arg0){ startActivity(新意图)(HomeActivity.this、, DefaultDisplay.class); } }); ((按钮)此.findViewById(R.id.ButtonProfile)) .setOnClickListener(新的OnClickListener(){ 公共void onClick(视图arg0){ if(GUIStatics.boolLoginStatus){ startActivity(新意图)(HomeActivity.this、, MyProfile.class); }否则{ 意向意向=新意向(HomeActivity.this, 登录类); 意图。putExtra(“moveTo”、“MyProfile”); 星触觉(意向); } } }); ((按钮)this.findViewById(R.id.ButtonNotifications)) .setOnClickListener(新的OnClickListener(){ 公共void onClick(视图arg0){ if(GUIStatics.boolLoginStatus){ startActivity(新意图)(HomeActivity.this、, showallNotificationActivity.class)); }否则{ 意向意向=新意向(HomeActivity.this, 登录类); 意图。putExtra(“移动到”、“显示所有通知活动”); 星触觉(意向); } } }); ((按钮)this.findViewById(R.id.ButtonFavorites)) .setOnClickListener(新的OnClickListener(){ 公共void onClick(视图arg0){ if(GUIStatics.boolLoginStatus){ startActivity(新意图)(HomeActivity.this、, FavoritesActivity.class)); }否则{ 意向意向=新意向(HomeActivity.this, 登录类); 意向。putExtra(“移动到”、“偏好活动”); 星触觉(意向); } } }); ((按钮)this.findviewbyd(R.id.ButtonMore)) .setOnClickListener(新的OnClickListener(){ 公共void onClick(视图arg0){ startActivity(新意图)(HomeActivity.this、, MoreListActivity.class); } }); } 公共无效位置更新() { CellLocation.requestLocationUpdate(); } 公共地址(双lat,双lng){ Geocoder Geocoder=新的Geocoder(HomeActivity.mContext,Locale.getDefault()); 试一试{ 列表地址=地理编码器。getFromLocation(lat,lng,1); 地址obj=地址。获取(0); 字符串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.getLocation(); add=add+“\n”+obj.getSubthoroughe(); 日志v(“IGA”、“地址”+添加); //Toast.makeText(这个“Address=>”+add, //吐司。长度(短)。show(); //TennisAppActivity.showDialog(添加); }捕获(IOE异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); Toast.makeText(this,e.getMessage(),Toast.LENGTH_SHORT.show(); } } 已更改位置上的公共无效(位置){ 纬度=位置。getLatitude(); longitude=location.getLongitude(); GUIStatics.latitude=location.getLatitude(); GUIStatics.longitude=location.getLongitude(); 对数v(“测试”、“IGA”+“纬度”+“Lng”+经度); //mLocManager.r getAddress(纬度、经度); 如果(位置!=null) { mLocManager.RemoveUpdate(此); } //Toast.makeText(这是“纬度”+纬度+“液化天然气”+经度, //吐司。长度(短)。show(); } 公共无效onProviderDisabled(字符串arg0){ //TODO自动生成的方法存根 Toast.makeText(HomeActivity.this,“Gps禁用”,Toast.LENGTH_SHORT.show(); 意图=新意图( android.provider.Settings.ACTION\u LOCATION\u SOURCE\u Settings); 星触觉(int)