Androidロケーションサービス--ユーザーのロケーション


  • 安卓中は、持参した位置サービスで、自分の現在の経緯度情報を表示することができますが、その前に対応する権限情報を宣言する必要があります.
  •     <uses-permission android:name="android.permission.INTERNET"></uses-permission>
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
  • レイアウトファイルは、取得した緯度を表示するためのTextViewであり、
  • はリストされません.
  • コードを見て説明します
  • public class MainActivity extends AppCompatActivity {
    
        private TextView textView;
        private LocationManager locationManager;
        private LocationListener locationListener;
    
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            init();
            //                   
            locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            //           ,       ,     ,                
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {return;}
            //                       
            List<String> prividers = locationManager.getProviders(true);
            Location location = null;
            String privider = null;
            if (prividers.contains(LocationManager.NETWORK_PROVIDER)) {
                privider = LocationManager.NETWORK_PROVIDER;
            } else if (prividers.contains(LocationManager.GPS_PROVIDER)) {
                privider = LocationManager.GPS_PROVIDER;
            } else {
                Toast.makeText(MainActivity.this, "            ", Toast.LENGTH_SHORT).show();
                return;
            }
            //                   
            location = locationManager.getLastKnownLocation(privider);
    
            if (location != null) {
                showLocation(location);
            }
            //             ,        
            locationListener = new LocationListener() {
                //           ,          ,       
                @Override
                public void onLocationChanged(Location location) {
                    showLocation(location);
                }
    
                @Override
                public void onStatusChanged(String provider, int status, Bundle extras) {
                }
    
                @Override
                public void onProviderEnabled(String provider) {
                }
    
                @Override
                public void onProviderDisabled(String provider) {
                }
            };
            //       ,           ,      
            //              
            //                 
            //               ,     
            //                 
            locationManager.requestLocationUpdates(privider, 5000, 1, locationListener);
    
        }
    
        private void init() {
            textView = (TextView) findViewById(R.id.textView);
        }
        //  location  ,                 
        private void showLocation(Location location) {
            String address = "  :" + location.getLatitude() + "
    "
    + " :" + location.getLongitude(); textView.setText(address); Toast.makeText(MainActivity.this, " ", Toast.LENGTH_SHORT).show(); } @Override protected void onDestroy() { // , , super.onDestroy(); if (locationListener != null) { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {return;} locationManager.removeUpdates(locationListener); } } }
  • 位置プロバイダは3種類の
  • がある.
  • GPS_PROVIDER
  • GPS測位により、精度は高いがより消費電力は
  • である.
  • NETWORK_PROVIDER
  • ネットワークによる位置決めは、精度はやや劣るが、消費電力は
  • 少ない.
  • PASSIVE_PROVIDER
  • は基本的に使用されず、受動的な位置決め方式である.
  • シミュレータ上の位置サービスが理想的ではないため、ここではスクリーンショットをしません.