0

// これで、位置情報を取得する場合と位置情報を取得しない場合があります。gps と gprs をオンにして、必要なアクセス許可を追加しました。私はボットで、実際に問題が何であるかを理解しています

パッケージ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;
}


}
4

2 に答える 2

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);
于 2012-10-15T22:58:14.617 に答える
0

GPS は、屋根の下や建物内では機能しません。ネットワーク プロバイダーで試すことをお勧めします。この投稿を参照してください

于 2012-10-15T16:33:39.317 に答える