【问题标题】:how to enable GPS on long key press of power button while screen is locked in Android?如何在Android中锁定屏幕时长按电源按钮启用GPS?
【发布时间】:2014-02-10 06:08:29
【问题描述】:

我正在开发一个应用程序,当用户在设备实际锁定为模式/屏幕锁定模式时长按电源键按钮时,发送用户在所选联系人号码上的当前位置。那么如何启用 GPS 以使其自动启用并获取当前的经度和纬度。

【问题讨论】:

    标签: android gps


    【解决方案1】:

    首先,您需要注意按键,并且有一些很好的信息here

    这是一个获取经度和纬度的例子:

    public class GPSTracker extends Service implements LocationListener
    {
        private final Context mContext;
    
        //flag for GPS Status
        boolean isGPSEnabled = false;
    
        //flag for network status
        boolean isNetworkEnabled = false;
    
        boolean canGetLocation = false;
    
        Location location;
        double latitude;
        double longitude;
    
        //The minimum distance to change updates in metters
        private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; //10 metters
    
        //The minimum time beetwen updates in milliseconds
        private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
    
        //Declaring a Location Manager
        protected LocationManager locationManager;
    
        public GPSTracker(Context context) 
        {
            this.mContext = context;
            getLocation();
        }
    
        public Location 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);
    
                if (!isGPSEnabled && !isNetworkEnabled)
                {
                    // no network provider is enabled
                }
                else
                {
                    this.canGetLocation = true;
    
                    //First get location from Network Provider
                    if (isNetworkEnabled)
                    {
                        locationManager.requestLocationUpdates(
                                LocationManager.NETWORK_PROVIDER,
                                MIN_TIME_BW_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
    
                        Log.d("Network", "Network");
    
                        if (locationManager != null)
                        {
                            location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                            updateGPSCoordinates();
                        }
                    }
    
                    //if GPS Enabled get lat/long using GPS Services
                    if (isGPSEnabled)
                    {
                        if (location == null)
                        {
                            locationManager.requestLocationUpdates(
                                    LocationManager.GPS_PROVIDER,
                                    MIN_TIME_BW_UPDATES,
                                    MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
    
                            Log.d("GPS Enabled", "GPS Enabled");
    
                            if (locationManager != null)
                            {
                                location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                                updateGPSCoordinates();
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                //e.printStackTrace();
                Log.e("Error : Location", "Impossible to connect to LocationManager", e);
            }
    
            return location;
        }
    
        public void updateGPSCoordinates()
        {
            if (location != null)
            {
                latitude = location.getLatitude();
                longitude = location.getLongitude();
            }
        }
    
        /**
         * Stop using GPS listener
         * Calling this function will stop using GPS in your app
         */
    
        public void stopUsingGPS()
        {
            if (locationManager != null)
            {
                locationManager.removeUpdates(GPSTracker.this);
            }
        }
    
        /**
         * Function to get latitude
         */
        public double getLatitude()
        {
            if (location != null)
            {
                latitude = location.getLatitude();
            }
    
            return latitude;
        }
    
        /**
         * Function to get longitude
         */
        public double getLongitude()
        {
            if (location != null)
            {
                longitude = location.getLongitude();
            }
    
            return longitude;
        }
    
        /**
         * Function to check GPS/wifi enabled
         */
        public boolean canGetLocation()
        {
            return this.canGetLocation;
        }
    
        /**
         * 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.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 
                {
                    List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
                    return addresses;
                } 
                catch (IOException e) 
                {
                    //e.printStackTrace();
                    Log.e("Error : Geocoder", "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 onProviderDisabled(String provider) 
        {   
        }
    
        @Override
        public void onProviderEnabled(String provider) 
        {   
        }
    
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) 
        {   
        }
    
        @Override
        public IBinder onBind(Intent intent) 
        {
            return null;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多