Error fetching location

0

I have a project that when accessing the activity, it already searches the place and fills the data, to save them, later. But when it is the first access, when it looks for the permissions, it always understands that it was not given permission for the GPS.

The following image:

Followthecodebelow:

privatevoidstartLocationUpdates(){//IniciaGPSparabuscarolocalatualif(!edtLatitude.getText().toString().isEmpty()||!edtLongitude.getText().toString().isEmpty())return;if(ActivityCompat.checkSelfPermission(getContext(),Manifest.permission.ACCESS_FINE_LOCATION)!=PackageManager.PERMISSION_GRANTED&&ActivityCompat.checkSelfPermission(getContext(),Manifest.permission.ACCESS_COARSE_LOCATION)!=PackageManager.PERMISSION_GRANTED){showAlertOk("Permissão para acessar GPS não foi concedida, portanto não será possível buscar o endereço atual automaticamente.");
    }else {
        LocationRequest mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(2000);
        mLocationRequest.setFastestInterval(1000);
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
        showProgress(true);
    }
}

So, I'd like to understand where I'm going wrong, because whenever it's the first access, it falls on this alert and does not call the place. When the permission is already given, it works. Usually.

EDIT: Manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="projeto.projeto1_teste">

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- Allows the API to use WiFi or mobile cell data (or both) to determine the device's location. -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- Allows the API to use the Global Positioning System (GPS) to determine the device's location to within a very small area. -->

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="APIGOOGLE"/>

        <activity android:name=".activity.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

EDIT2:

Runtime permissions for android 6.0

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Solicita as permissões
    String[] permissoes = new String[]{
            Manifest.permission.ACCESS_COARSE_LOCATION,
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.INTERNET,
            Manifest.permission.ACCESS_NETWORK_STATE,
    };
    Permissions.validate(this, 0, permissoes);

Class Permissions:

public class Permissions {

        /**
         * Solicita as permissões
         */
        public static boolean validate(Activity activity, int requestCode, String... permissions) {
            List<String> list = new ArrayList<String>();
            for (String permission : permissions) {
                // Valida permissão
                boolean ok = ContextCompat.checkSelfPermission(activity, permission) == PackageManager.PERMISSION_GRANTED;
                if (!ok) {
                    list.add(permission);
                }
            }
            if (list.isEmpty()) {
                // Tudo ok, retorna true
                return true;
            }

            // Lista de permissões que falta acesso.
            String[] newPermissions = new String[list.size()];
            list.toArray(newPermissions);

            // Solicita permissão
            ActivityCompat.requestPermissions(activity, newPermissions, 1);

            return false;
        }
    }
    
asked by anonymous 27.06.2016 / 20:38

1 answer

1

Retries the function to start fetching the location again after requesting the permission:

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case PERMISSION_REQUEST_CODE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                startLocationUpdates();
            } else {

                // Não concedeu, informar ou tratar 


            }
            break;
    }
}
    
30.06.2016 / 21:39