【问题标题】:what i should know to do this in android我应该知道在android中做到这一点
【发布时间】:2019-01-24 15:57:32
【问题描述】:

我想问你关于当我点击按钮时,结果将直接自动插入到他们的“输入ID”中的操作......我如何在android中做到这一点??

【问题讨论】:

    标签: android-gps


    【解决方案1】:

    好吧,如果你不熟悉 Android,那么我建议你学习一些关于 Android 基础和 Java 的教程。

    除此之外,Android 确实提供了地理编码功能,你应该有纬度和经度来运行以下代码:

    Geocoder geocoder;
    List<Address> addresses;
    geocoder = new Geocoder(this, Locale.getDefault());
    
    addresses = geocoder.getFromLocation(latitude, longitude, 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5
    
    String address = addresses.get(0).getAddressLine(0);
    String city = addresses.get(0).getLocality();
    String state = addresses.get(0).getAdminArea();
    String country = addresses.get(0).getCountryName();
    String postalCode = addresses.get(0).getPostalCode();
    String knownName = addresses.get(0).getFeatureName();
    

    如果您没有用户的纬度和经度,并且还想从安卓设备访问它,您可以使用以下过程:

    AndroidManifest.xml

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    

    活动

    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
        TextView textview;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.geo_locations);
    
            // check if GPS enabled
            GPSTracker gpsTracker = new GPSTracker(this);
    
            if (gpsTracker.getIsGPSTrackingEnabled())
            {
                String stringLatitude = String.valueOf(gpsTracker.latitude);
                textview = (TextView)findViewById(R.id.fieldLatitude);
                textview.setText(stringLatitude);
    
                String stringLongitude = String.valueOf(gpsTracker.longitude);
                textview = (TextView)findViewById(R.id.fieldLongitude);
                textview.setText(stringLongitude);
    
                String country = gpsTracker.getCountryName(this);
                textview = (TextView)findViewById(R.id.fieldCountry);
                textview.setText(country);
    
                String city = gpsTracker.getLocality(this);
                textview = (TextView)findViewById(R.id.fieldCity);
                textview.setText(city);
    
                String postalCode = gpsTracker.getPostalCode(this);
                textview = (TextView)findViewById(R.id.fieldPostalCode);
                textview.setText(postalCode);
    
                String addressLine = gpsTracker.getAddressLine(this);
                textview = (TextView)findViewById(R.id.fieldAddressLine);
                textview.setText(addressLine);
            }
            else
            {
                // can't get location
                // GPS or Network is not enabled
                // Ask user to enable GPS/network in settings
                gpsTracker.showSettingsAlert();
            }
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.varna_lab_geo_locations, menu);
            return true;
        }
    }
    

    GPS 追踪器

    import java.io.IOException;
    import java.util.List;
    import java.util.Locale;
    
    import android.app.AlertDialog;
    import android.app.Service;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.location.Address;
    import android.location.Geocoder;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.provider.Settings;
    import android.util.Log;
    
    /**
     * Create this Class from tutorial : 
     * http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial
     * 
     * For Geocoder read this : http://stackoverflow.com/questions/472313/android-reverse-geocoding-getfromlocation
     * 
     */
    
    public class GPSTracker extends Service implements LocationListener {
    
        // Get Class Name
        private static String TAG = GPSTracker.class.getName();
    
        private final Context mContext;
    
        // flag for GPS Status
        boolean isGPSEnabled = false;
    
        // flag for network status
        boolean isNetworkEnabled = false;
    
        // flag for GPS Tracking is enabled 
        boolean isGPSTrackingEnabled = false;
    
        Location location;
        double latitude;
        double longitude;
    
        // How many Geocoder should return our GPSTracker
        int geocoderMaxResults = 1;
    
        // The minimum distance to change updates in meters
        private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
    
        // The minimum time between updates in milliseconds
        private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
    
        // Declaring a Location Manager
        protected LocationManager locationManager;
    
        // Store LocationManager.GPS_PROVIDER or LocationManager.NETWORK_PROVIDER information
        private String provider_info;
    
        public GPSTracker(Context context) {
            this.mContext = context;
            getLocation();
        }
    
        /**
         * Try to get my current location by GPS or Network Provider
         */
        public void getLocation() {
    
            try {
                locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);
    
                //getting GPS status
                isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    
                //getting network status
                isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    
                // Try to get location if you GPS Service is enabled
                if (isGPSEnabled) {
                    this.isGPSTrackingEnabled = true;
    
                    Log.d(TAG, "Application use GPS Service");
    
                    /*
                     * This provider determines location using
                     * satellites. Depending on conditions, this provider may take a while to return
                     * a location fix.
                     */
    
                    provider_info = LocationManager.GPS_PROVIDER;
    
                } else if (isNetworkEnabled) { // Try to get location if you Network Service is enabled
                    this.isGPSTrackingEnabled = true;
    
                    Log.d(TAG, "Application use Network State to get GPS coordinates");
    
                    /*
                     * This provider determines location based on
                     * availability of cell tower and WiFi access points. Results are retrieved
                     * by means of a network lookup.
                     */
                    provider_info = LocationManager.NETWORK_PROVIDER;
    
                } 
    
                // Application can use GPS or Network Provider
                if (!provider_info.isEmpty()) {
                    locationManager.requestLocationUpdates(
                        provider_info,
                        MIN_TIME_BW_UPDATES,
                        MIN_DISTANCE_CHANGE_FOR_UPDATES, 
                        this
                    );
    
                    if (locationManager != null) {
                        location = locationManager.getLastKnownLocation(provider_info);
                        updateGPSCoordinates();
                    }
                }
            }
            catch (Exception e)
            {
                //e.printStackTrace();
                Log.e(TAG, "Impossible to connect to LocationManager", e);
            }
        }
    
        /**
         * Update GPSTracker latitude and longitude
         */
        public void updateGPSCoordinates() {
            if (location != null) {
                latitude = location.getLatitude();
                longitude = location.getLongitude();
            }
        }
    
        /**
         * GPSTracker latitude getter and setter
         * @return latitude
         */
        public double getLatitude() {
            if (location != null) {
                latitude = location.getLatitude();
            }
    
            return latitude;
        }
    
        /**
         * GPSTracker longitude getter and setter
         * @return
         */
        public double getLongitude() {
            if (location != null) {
                longitude = location.getLongitude();
            }
    
            return longitude;
        }
    
        /**
         * GPSTracker isGPSTrackingEnabled getter.
         * Check GPS/wifi is enabled
         */
        public boolean getIsGPSTrackingEnabled() {
    
            return this.isGPSTrackingEnabled;
        }
    
        /**
         * Stop using GPS listener
         * Calling this method will stop using GPS in your app
         */
        public void stopUsingGPS() {
            if (locationManager != null) {
                locationManager.removeUpdates(GPSTracker.this);
            }
        }
    
        /**
         * Function to show settings alert dialog
         */
        public void showSettingsAlert() {
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
    
            //Setting Dialog Title
            alertDialog.setTitle(R.string.GPSAlertDialogTitle);
    
            //Setting Dialog Message
            alertDialog.setMessage(R.string.GPSAlertDialogMessage);
    
            //On Pressing Setting button
            alertDialog.setPositiveButton(R.string.action_settings, new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) 
                {
                    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    mContext.startActivity(intent);
                }
            });
    
            //On pressing cancel button
            alertDialog.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) 
                {
                    dialog.cancel();
                }
            });
    
            alertDialog.show();
        }
    
        /**
         * Get list of address by latitude and longitude
         * @return null or List<Address>
         */
        public List<Address> getGeocoderAddress(Context context) {
            if (location != null) {
    
                Geocoder geocoder = new Geocoder(context, Locale.ENGLISH);
    
                try {
                    /**
                     * Geocoder.getFromLocation - Returns an array of Addresses 
                     * that are known to describe the area immediately surrounding the given latitude and longitude.
                     */
                    List<Address> addresses = geocoder.getFromLocation(latitude, longitude, this.geocoderMaxResults);
    
                    return addresses;
                } catch (IOException e) {
                    //e.printStackTrace();
                    Log.e(TAG, "Impossible to connect to Geocoder", e);
                }
            }
    
            return null;
        }
    
        /**
         * Try to get AddressLine
         * @return null or addressLine
         */
        public String getAddressLine(Context context) {
            List<Address> addresses = getGeocoderAddress(context);
    
            if (addresses != null && addresses.size() > 0) {
                Address address = addresses.get(0);
                String addressLine = address.getAddressLine(0);
    
                return addressLine;
            } else {
                return null;
            }
        }
    
        /**
         * Try to get Locality
         * @return null or locality
         */
        public String getLocality(Context context) {
            List<Address> addresses = getGeocoderAddress(context);
    
            if (addresses != null && addresses.size() > 0) {
                Address address = addresses.get(0);
                String locality = address.getLocality();
    
                return locality;
            }
            else {
                return null;
            }
        }
    
        /**
         * Try to get Postal Code
         * @return null or postalCode
         */
        public String getPostalCode(Context context) {
            List<Address> addresses = getGeocoderAddress(context);
    
            if (addresses != null && addresses.size() > 0) {
                Address address = addresses.get(0);
                String postalCode = address.getPostalCode();
    
                return postalCode;
            } else {
                return null;
            }
        }
    
        /**
         * Try to get CountryName
         * @return null or postalCode
         */
        public String getCountryName(Context context) {
            List<Address> addresses = getGeocoderAddress(context);
            if (addresses != null && addresses.size() > 0) {
                Address address = addresses.get(0);
                String countryName = address.getCountryName();
    
                return countryName;
            } else {
                return null;
            }
        }
    
        @Override
        public void onLocationChanged(Location location) {
        }
    
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
    
        @Override
        public void onProviderEnabled(String provider) {
        }
    
        @Override
        public void onProviderDisabled(String provider) {
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    }
    

    一些教程:

    https://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/ https://www.tutorialspoint.com/android/android_location_based_services.htm https://www.rishabhsoft.com/blog/android-geocoding-and-reverse-geocoding https://developers.google.com/maps/documentation/geocoding/start https://www.tutorialspoint.com/android/android_location_based_services.htm

    【讨论】:

    • 谢谢先生,您能告诉我在 Android 中我应该寻找什么来理解这一点吗,例如关键字或要在 youtube 和 google 中搜索的短语??
    • @akira 你可以搜索“android 获取设备位置”“android 获取用户位置”“android 如何读取用户位置”“android 如何对 lat long 进行地理编码”
    • @akira 仍然,我会建议你在尝试任何实现之前先学习 Android 的基础课程
    • 谢谢你先生,对不起先生我想再问你一次,因为我真的很好奇当我点击按钮时,结果将直接自动插入到他们的 我如何在 android 中做到这一点,我究竟应该搜索什么来理解 Android 中的这个动作??
    • @akira 学习一些 android 教程,这就是你开始所需要的一切
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    相关资源
    最近更新 更多