androidで現在位置を取得
コンパスアプリとか地図の距離感とか
調べたいときに使用するかも
権限を付与する
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
この2つを追加するらしい
で実装
画面
※簡単にラベルだけ
ソース
package jp.mshige1979.app.samplelocation1; import android.content.Context; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; public class MainActivity extends ActionBarActivity implements LocationListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // LocationManagerを取得 LocationManager mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // Criteriaオブジェクトを生成 Criteria criteria = new Criteria(); // Accuracyを指定(低精度) criteria.setAccuracy(Criteria.ACCURACY_COARSE); // PowerRequirementを指定(低消費電力) criteria.setPowerRequirement(Criteria.POWER_LOW); // ロケーションプロバイダの取得 String provider = mLocationManager.getBestProvider(criteria, true); // 取得したロケーションプロバイダを表示 TextView tv_provider = (TextView) findViewById(R.id.textView); tv_provider.setText("Provider: "+provider); mLocationManager.requestLocationUpdates(provider, 0, 0, this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } // ここから以下はLocationListenerの追加メソッド @Override public void onLocationChanged(Location location){ // 緯度の表示 TextView tv_lat = (TextView) findViewById(R.id.textView2); tv_lat.setText("Latitude:"+location.getLatitude()); // 経度の表示 TextView tv_lng = (TextView) findViewById(R.id.textView3); tv_lng.setText("Latitude:"+location.getLongitude()); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } }
※LocationManagerでいろいろとやる
結果
※多少の誤差があるけどなんとか取得出来る感じ
所感
現在位置を上手く取得する方法は精度が重要なのでもう少し簡単にやりたいものです。
理解していないので難しく感じるように見えるのでなんとか形にしてから対応してみる。