GPS測位を使用するには、まず、マニフェストファイル(AndroidManifest.xml)で測位を取得するためのアクセス許可を登録する必要があります。
1.ロケーションマネージャーオブジェクトLocationManagerを取得します
import android.location.LocationManager;
LocationManager lm; //
lm =(LocationManager) this.getSystemService(Context`.LOCATION_SERVICE); //
2.通常、LocationManagerのgetLastKnownLocation(LocationManager.GPS_PROVIDER);メソッドを使用して、Locationオブジェクトを取得します
String provider = LocationManager.GPS_PROVIDER;// 指定LocationManager的定位方法
Location location = locationManager.getLastKnownLocation(provider);// 调用getLastKnownLocation()方法获取当前的位置信息
ただし、この方法はいくつかの理由で推奨されません。
まず、位置情報サービスを提供する多くのアプリケーションでは、現在の位置情報を取得するだけでなく、位置の変化を監視し、特定の処理方法を呼び出す必要があります。位置情報が変更された場合、その中でもLocationManagerは、便利で効率的な位置情報監視メソッドrequestLocationUpdates()を提供します。これにより、位置情報の距離変更と時間間隔の設定に従って位置情報変更イベントの条件を生成でき、多数の位置情報を回避できます。距離のわずかな変化により位置が変化します。イベント。
次に、GPSをオンにすると、プロバイダーの値はGPSになります。現時点での測位方法はGPSです。GPSの測位が遅いため、Locationオブジェクトをすぐに返すことはできず、nullを返します。
この問題については、次のリンクを参照してください
。1.Androidポジショニングの実現
2. Android位置情報サービスの概要、およびLocationManagerオブジェクトを介して位置情報を取得する方法
3. apn \ wifi \ gpsのいくつかの方法を含む、GPS位置を取得するためのAndroid開発
3.推荐locationManager.requestLocationUpdates();
LocationManagerメソッドで監視場所の変更を設定するためのコードは次のとおりです。
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10,new MyLocationListener());
次に、上記のコード行のパラメーターを紹介します。最初のパラメーターは、以前にLocationManagerに指定した測位方法、GPS測位、またはネットワーク測位です。2番目のパラメーターは、位置変更イベントを生成するための時間間隔(マイクロ秒単位)です。 。3番目のパラメーターは距離条件をメートル単位で参照し、4番目のパラメーターはコールバック関数です。これは位置変更イベントを処理するため、つまりLocationListenerリスナーを設定するために使用されます。全体として、そのコード行は、位置変更イベントの生成を、2秒の時間間隔で10メートルの距離変更に条件付けます。
4.ロケーションオブジェクトのgetLongitude()とgetLatitude()を使用して、緯度と経度のデータを取得します
tv_01.setText("经度:"+loc.getLongitude());
tv_02.setText("纬度:"+loc.getLatitude());
5.特定の実装の簡単なデモコードは次のとおりです
package introduction.android.gpsLocationin;
/*
* 本工程GPSLocation的功能是使用GPS实时定位,实时显示手机的经纬度
*/
import introduction.android.gpsLocation.R;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.location.LocationListener;
import android.location.LocationManager; //
import android.location.Location; //
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button btn_listen;
private TextView tv_01,tv_02;
LocationManager lm; //
Location loc; //
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lm =(LocationManager) this.getSystemService(Context.LOCATION_SERVICE); //
//检测GPS状态(是否开启)
if(!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)){ //若未打开GPS
Toast.makeText(MainActivity.this,"请开启GPS服务",Toast.LENGTH_LONG).show();
Intent myintent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(myintent); //运行手机的设置程序
}
btn_listen=(Button) findViewById(R.id.btn_listen);
tv_01=(TextView) findViewById(R.id.tv_01);
tv_02=(TextView) findViewById(R.id.tv_02);
btn_listen.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,new MyLocationListener());
}
});
}
//位置监听器方法
class MyLocationListener implements LocationListener{ //位置监听器,作为方法参数
@Override
public void onLocationChanged(Location loc) {
// TODO Auto-generated method stub
tv_01.setText("经度:"+loc.getLongitude());
tv_02.setText("纬度:"+loc.getLatitude());
}
@Override
public void onProviderDisabled(String provider) {
//当provider被用户关闭时调用
Log.i("GpsLocation","provider被关闭!");
}
@Override
public void onProviderEnabled(String provider) {
//当provider被用户开启后调用
Log.i("GpsLocation","provider被开启!");
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
//当provider的状态在OUT_OF_SERVICE、TEMPORARILY_UNAVAILABLE和AVAILABLE之间发生变化时调用
Log.i("GpsLocation","provider状态发生改变!");
}
}
}
6.緯度と経度で都市の場所を取得します
getPosition(double longitude, double latitude){
// 通过经纬度获取地址,由于地址会有多个,这个和经纬度精确度有关
// 本实例中定义了最大的返回数2,即在集合对象中有两个值
List<Address> list = null;
Geocoder ge = new Geocoder(getActivity());
try {
list = ge.getFromLocation(latitude, longitude, 2);
} catch (IOException e) {
e.printStackTrace();
}
if (list !=null && list.size()>0){
for (int i = 0; i < list.size(); i++){
Address ad = list.get(i);
cityName = ad.getLocality();//获取城市
}
}
}
———————————————
転載:https://blog.csdn.net/Bruce_shan/article/details/50536203