我应该知道在android中做到这一点

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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://***.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 教程,这就是你开始所需要的一切

以上是关于我应该知道在android中做到这一点的主要内容,如果未能解决你的问题,请参考以下文章

Android背景+文本+按钮图标

我应该在这里使用完成处理程序吗?如果是这样,如何最好地做到这一点?

在 Android 中使用自定义字体

在Android中,我应该使用什么来在图像上创建可移动对象?

Android 绘制相机预览

如何在右侧显示android复选框?