Android Open Source - permission-explorer Access Fine Location Action






From Project

Back to project page permission-explorer.

License

The source code is released under:

Copyright (C) 2012 Rui Gon?alves and Daniel Cibr?o Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),...

If you think the Android project permission-explorer listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package pt.up.fe.ssin.pexplorer.actions;
/*  w w  w.j a  v  a  2s.c om*/
import java.util.Timer;
import java.util.TimerTask;

import pt.up.fe.ssin.pexplorer.R;
import pt.up.fe.ssin.pexplorer.app.PermissionAction;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

public class AccessFineLocationAction extends PermissionAction {

    LocationManager m_location_manager;
    boolean gpsEnabled;
    Timer timer1;
    public LocationResult locationResult;
    boolean failed = true;

    public AccessFineLocationAction() {
        super(R.string.access_fine_location_label,
                R.string.access_fine_location_label,
                PermissionAction.DO_NOTHING);
    }

    @Override
    protected void doAction(final Context context) {
        m_location_manager = (LocationManager) context
                .getSystemService(Context.LOCATION_SERVICE);
        gpsEnabled = m_location_manager
                .isProviderEnabled(LocationManager.GPS_PROVIDER);

        if (gpsEnabled) {
            MyLocation myLocation = new MyLocation();
            myLocation.getLocation(context, locationResult);
            Toast.makeText(context, R.string.access_fine_location_retr,
                    Toast.LENGTH_SHORT).show();
            locationResult = new LocationResult() {
                @Override
                public void gotLocation(final Location location) {
                    if (location != null) {
                        failed = false;
                        new AlertDialog.Builder(context)
                                .setTitle(R.string.access_fine_location_title)
                                .setMessage(
                                        String.format(
                                                context.getString(R.string.access_fine_location_coord),
                                                location.getLatitude(),
                                                location.getLongitude()))
                                .setCancelable(true)
                                .setPositiveButton(R.string.continue_,
                                        new DialogInterface.OnClickListener() {
                                            public void onClick(
                                                    DialogInterface dialog,
                                                    int id) {
                                            }
                                        }).show();
                    }
                };
            };
        } else
            Toast.makeText(context, R.string.access_fine_location_not_enabled,
                    Toast.LENGTH_SHORT).show();
    }

    private class MyLocation {
        private Timer timer1;
        private LocationManager lm;
        private boolean gps_enabled = false;
        private boolean network_enabled = false;

        public boolean getLocation(Context context, LocationResult result) {
            locationResult = result;
            if (lm == null)
                lm = (LocationManager) context
                        .getSystemService(Context.LOCATION_SERVICE);

            try {
                gps_enabled = lm
                        .isProviderEnabled(LocationManager.GPS_PROVIDER);
            } catch (Exception ex) {
            }
            try {
                network_enabled = lm
                        .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
            } catch (Exception ex) {
            }

            if (!gps_enabled && !network_enabled)
                return false;

            if (gps_enabled)
                lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
                        locationListenerGps);
            if (network_enabled)
                lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,
                        0, locationListenerNetwork);
            timer1 = new Timer();
            timer1.schedule(new GetLastLocation(), 20000);
            return true;
        }

        LocationListener locationListenerGps = new LocationListener() {
            public void onLocationChanged(Location location) {
                timer1.cancel();
                locationResult.gotLocation(location);
                lm.removeUpdates(this);
                lm.removeUpdates(locationListenerNetwork);
            }

            public void onProviderDisabled(String provider) {
            }

            public void onProviderEnabled(String provider) {
            }

            public void onStatusChanged(String provider, int status,
                    Bundle extras) {
            }
        };

        LocationListener locationListenerNetwork = new LocationListener() {
            public void onLocationChanged(Location location) {
                timer1.cancel();
                locationResult.gotLocation(location);
                lm.removeUpdates(this);
                lm.removeUpdates(locationListenerGps);
            }

            public void onProviderDisabled(String provider) {
            }

            public void onProviderEnabled(String provider) {
            }

            public void onStatusChanged(String provider, int status,
                    Bundle extras) {
            }
        };

        class GetLastLocation extends TimerTask {
            @Override
            public void run() {
                lm.removeUpdates(locationListenerGps);
                lm.removeUpdates(locationListenerNetwork);

                Location net_loc = null, gps_loc = null;
                if (gps_enabled)
                    gps_loc = lm
                            .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                if (network_enabled)
                    net_loc = lm
                            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

                // if there are both values use the latest one
                if (gps_loc != null && net_loc != null) {
                    if (gps_loc.getTime() > net_loc.getTime())
                        locationResult.gotLocation(gps_loc);
                    else
                        locationResult.gotLocation(net_loc);
                    return;
                }

                if (gps_loc != null) {
                    locationResult.gotLocation(gps_loc);
                    return;
                }
                if (net_loc != null) {
                    locationResult.gotLocation(net_loc);
                    return;
                }
                locationResult.gotLocation(null);
            }
        }
    }

    public static abstract class LocationResult {
        public abstract void gotLocation(Location location);
    }
}




Java Source Code List

pt.up.fe.ssin.pexplorer.actions.AccessFineLocationAction.java
pt.up.fe.ssin.pexplorer.actions.AccessNetworkStateAction.java
pt.up.fe.ssin.pexplorer.actions.ChangeWifiStateAction.java
pt.up.fe.ssin.pexplorer.actions.GetAccountsAction.java
pt.up.fe.ssin.pexplorer.actions.InternetAccessAction.java
pt.up.fe.ssin.pexplorer.actions.PhoneCallAction.java
pt.up.fe.ssin.pexplorer.actions.ReadCalendarAction.java
pt.up.fe.ssin.pexplorer.actions.ReadContactsAction.java
pt.up.fe.ssin.pexplorer.actions.ReadPhoneStateAction.java
pt.up.fe.ssin.pexplorer.actions.RebootAction.java
pt.up.fe.ssin.pexplorer.actions.RetrieveRunningTasksAction.java
pt.up.fe.ssin.pexplorer.actions.SendTestSmsAction.java
pt.up.fe.ssin.pexplorer.actions.ShellCommandAction.java
pt.up.fe.ssin.pexplorer.actions.TakePictureAction.java
pt.up.fe.ssin.pexplorer.actions.TakePictureActivity.java
pt.up.fe.ssin.pexplorer.actions.VibrateAction.java
pt.up.fe.ssin.pexplorer.actions.WriteCalendarAction.java
pt.up.fe.ssin.pexplorer.actions.WriteExternalStorageAction.java
pt.up.fe.ssin.pexplorer.actions.WriteSettingsAction.java
pt.up.fe.ssin.pexplorer.app.ActionRegistry.java
pt.up.fe.ssin.pexplorer.app.ApplicationListAdapter.java
pt.up.fe.ssin.pexplorer.app.FilterConfigActivity.java
pt.up.fe.ssin.pexplorer.app.Keys.java
pt.up.fe.ssin.pexplorer.app.PermissionAction.java
pt.up.fe.ssin.pexplorer.app.PermissionExplorerActivity.java
pt.up.fe.ssin.pexplorer.app.PermissionInfoActivity.java
pt.up.fe.ssin.pexplorer.app.PermissionListAdapter.java
pt.up.fe.ssin.pexplorer.data.GlobalSchema.java
pt.up.fe.ssin.pexplorer.data.PermissionCatalog.java
pt.up.fe.ssin.pexplorer.data.PermissionDBOperations.java
pt.up.fe.ssin.pexplorer.data.PermissionExplorerContentProvider.java
pt.up.fe.ssin.pexplorer.entities.Contact.java
pt.up.fe.ssin.pexplorer.utils.ApplicationDetailsHelper.java
pt.up.fe.ssin.pexplorer.utils.Pair.java
pt.up.fe.ssin.pexplorer.utils.PermissionUtils.java
pt.up.fe.ssin.pexplorer.utils.ui.AlertDialogHelper.java
pt.up.fe.ssin.pexplorer.utils.ui.CheckedLinearLayout.java
pt.up.fe.ssin.pexplorer.utils.ui.CheckedRelativeLayout.java
pt.up.fe.ssin.pexplorer.utils.ui.FilterTextWatcher.java
pt.up.fe.ssin.pexplorer.utils.ui.InputDialogBuilder.java
pt.up.fe.ssin.pexplorer.utils.ui.SimpleObjectAdapter.java
pt.up.fe.ssin.pexplorer.utils.ui.views.NonEventBlockingScrollView.java