2012-05-02 124 views
0

我想从以下Android代码获取纬度和经度。使用Android获取GPS位置

location = locationManager.getLastKnownLocation(provider); 

这里我得到error location is null

下面是代码:

package com.p; 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.Bundle; 

import android.content.Context; 
import android.location.Criteria; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.widget.Toast; 
public class GooglemapActivity extends Activity implements LocationListener { 
    private TextView latituteField; 
     private TextView longitudeField; 
    private LocationManager locationManager; 
    private String provider; 


/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    latituteField = (TextView) findViewById(R.id.TextView02); 
    longitudeField = (TextView) findViewById(R.id.TextView04); 

    // Get the location manager 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    // Define the criteria how to select the locatioin provider -> use 
    // default 
    Criteria criteria = new Criteria(); 
    provider = locationManager.getBestProvider(criteria, false); 
    Location location = locationManager.getLastKnownLocation(provider); 

    // Initialize the location fields 
    if (location != null) { 
     System.out.println("Provider " + provider + " has been selected."); 
     int lat = (int) (location.getLatitude()); 
     int lng = (int) (location.getLongitude()); 
     latituteField.setText(String.valueOf(lat)); 
     longitudeField.setText(String.valueOf(lng)); 
    } else { 
     latituteField.setText("Provider not available"); 
     longitudeField.setText("Provider not available"); 
    } 
} 

/* Request updates at startup */ 
@Override 
protected void onResume() { 
    super.onResume(); 
    locationManager.requestLocationUpdates(provider, 400, 1, this); 
} 

/* Remove the locationlistener updates when Activity is paused */ 
@Override 
protected void onPause() { 
    super.onPause(); 
    locationManager.removeUpdates(this); 
} 

public void onLocationChanged(Location location) { 
    int lat = (int) (location.getLatitude()); 
    int lng = (int) (location.getLongitude()); 
    latituteField.setText(String.valueOf(lat)); 
    longitudeField.setText(String.valueOf(lng)); 
} 

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

} 

public void onProviderEnabled(String provider) { 
    Toast.makeText(this, "Enabled new provider " + provider, 
      Toast.LENGTH_SHORT).show(); 

} 

public void onProviderDisabled(String provider) { 
    Toast.makeText(this, "Disabled provider " + provider, 
      Toast.LENGTH_SHORT).show(); 
} 
} 

我加入以下permisions:

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

但我收到以下错误:

Provider not available

+0

下库负责所有的标准,缓存和其他后台工作:https://github.com/delight-im/Android-SimpleLocation – caw

回答

0

认为你需要从要接收更新其供应商指​​定。

你有两个选择:

  • GPS_PROVIDER
  • NETWORK_PROVIDER

你可能失去了一些东西是这样的:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this); 
+0

我已经添加了以下代码locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,this);但仍然获得marktext禁用提供商 –

+0

也尝试获取LocationListener接口方法上的坐标。因为一旦你创建了这个活动,需要一段时间才能掌握提供者和提供的坐标。你可能想通过这个:http://developer.android.com/guide/topics/location/obtaining-user-location。html – bmartins

+0

尝试打印出StatusChanged&onLocationChanged – bmartins

0
  1. 你对GPS的切换设置 - >位置?
  2. 为什么要使用(int) (location.getLatitude()) - 经/纬度是float
1

您还没有定义有效的标准。定义如下

Criteria criteria = new Criteria(); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 
    criteria.setAltitudeRequired(false);//true if required 
    criteria.setBearingRequired(false);//true if required 
    criteria.setCostAllowed(true); 
    criteria.setPowerRequirement(Criteria.POWER_LOW); 
    provider = locationManager.getBestProvider(criteria, true);//search for enabled provider 
0

我想你可能需要添加以下权限为好,因为我敢肯定的是,FINE依赖于粗...

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