2012-10-15 2 views
0

//이 위치에 때때로 가끔씩 위치가 표시되지 않고 gps 및 gprs가 켜져 있고 필요한 권한이 필요합니다. 나는 실제로 문제가 무엇인지 알아 듣는다.위치가 어느 정도 시간이 지남에 따라 때때로

package com.example.addr;

import java.util.List; 
import java.util.Locale; 

import android.location.Address; 
import android.location.Criteria; 
import android.location.Geocoder; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.view.Menu; 
    import android.widget.TextView; 


    public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    LocationManager locationManager; 
    String context = Context.LOCATION_SERVICE; 
    locationManager = (LocationManager)getSystemService(context); 

    Criteria crta = new Criteria(); 
    crta.setAccuracy(Criteria.ACCURACY_FINE); 
    crta.setAltitudeRequired(false); 
    crta.setBearingRequired(false); 
    crta.setCostAllowed(true); 
    crta.setPowerRequirement(Criteria.POWER_LOW); 
    String provider = locationManager.getBestProvider(crta, true); 

// String provider = LocationManager.GPS_PROVIDER; 
    Location location = locationManager.getLastKnownLocation(provider); 
    updateWithNewLocation(location); 

    locationManager.requestLocationUpdates(provider, 2000, 10, locationListener); 
    } 
private final LocationListener locationListener = new LocationListener() 
{ 

@Override 
public void onLocationChanged(Location location) { 
updateWithNewLocation(location); 
} 

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

@Override 
public void onProviderEnabled(String provider) { 
} 

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

}; 

private void updateWithNewLocation(Location location) { 
    String latLong; 
    TextView myLocation; 
    myLocation = (TextView) findViewById(R.id.myLocation); 

    String addressString = "Sorry No Address Found"; 

    if(location!=null) { 
     double lat = location.getLatitude(); 
    double lon = location.getLongitude(); 
    latLong = "Lat:" + lat + "\nLong:" + lon; 

    double lattitude = location.getLatitude(); 
    double longitude = location.getLongitude(); 
    Geocoder gc = new Geocoder(this,Locale.getDefault()); 
    try { 
    List<Address> addresses= gc.getFromLocation(lattitude, longitude, 1); 
    StringBuilder sb = new StringBuilder(); 
    if(addresses.size()>0) { 
    Address address=addresses.get(0); 
    for(int i=0;i<address.getMaxAddressLineIndex();i++) 
     sb.append(address.getAddressLine(i)).append("\n"); 
    sb.append(address.getLocality()).append("\n"); 
    sb.append(address.getPostalCode()).append("\n"); 
sb.append(address.getCountryName()); 
} 
    addressString = sb.toString(); 
    } 
    catch (Exception e) { 
    } 
    } else { 
    latLong = " NO Location Found "; 
    } 

    myLocation.setText("Current Position is :\n"+ latLong + "\n"+ addressString); 
     } 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 


} 

답변

0

GPS는 지붕 아래에서 작동하지 않으며 네트워크 제공 업체와 함께 시도하는 것이 좋습니다. See this post 도움이됩니다.

0

원하는 위치 정보 제공자를 Android에 명시 적으로 권하고 싶습니다. 기준을 사용하면 스케치 결과를 얻을 수 있습니다. Criteria.POWER_LOW를 설정하면 GPS가 고출력으로 간주되기 때문에 GPS를 제거 할 수 있습니다. 예를 들어

의 GPS 제공자 :

String provider = LocationManager.GPS_PROVIDER; 
... 
locationManager.requestLocationUpdates(provider, 2000, 10, locationListener); 

그리고 네트워크 제공자 :

String provider = LocationManager.NETWORK_PROVIDER; 
... 
locationManager.requestLocationUpdates(provider, 2000, 10, locationListener); 
관련 문제