Android permission check GPS?

8 respostas
androidjava
D

Preciso fazer esta chamada

Localiza localizacao = new Localiza();
localizacao.getLocalizacao(ListaMensagemActivity.this);

meu metodo esta assim

public class Localiza {
    List<Location> locs = new ArrayList<Location>();
    LocationListener listener;
    String numero, latitude, longitude, time;

    public void getLocalizacao(Context context) {


        LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);


        long tempo = 500; //5 minutos
        float distancia = 30; // 30 metros

        this.listener = new LocationListener() {

            @Override
            public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
                //Toast.makeText(getApplicationContext(), "Status alterado", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onProviderEnabled(String arg0) {
                //Toast.makeText(getApplicationContext(), "Provider Habilitado", Toast.LENGTH_LONG).show();

            }

            @Override
            public void onProviderDisabled(String arg0) {
                //Toast.makeText(getApplicationContext(), "Provider Desabilitado", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onLocationChanged(Location location) {


                if (location != null) {
                    locs.add(location);
                    numero = "" + locs.size();
                    latitude = Double.toString(location.getLatitude());
                    longitude = Double.toString(location.getLongitude());

                }

            }
        };

        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, tempo, distancia, this.listener, null);
        Log.i("LOGae",latitude);
    }


}

agora esta falando para eu implementar o permission check, porem nao sei como proceder. Alguem tem uma idéia?

Agradeço desde já

8 Respostas

L

A partir da versão 23 da API é preciso confirmar as permissões definidas no manifest

Exemplo

D

fiz assim, mas acho que esta tudo errado. Não sei oque colocar

if (ContextCompat.checkSelfPermission(context,
            android.Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(context,
                android.Manifest.permission.ACCESS_FINE_LOCATION)) {

        } else {

            ActivityCompat.requestPermissions(context,
                    new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                    android.Manifest.permission.ACCESS_FINE_LOCATION);

        }
    }
L
if (ContextCompat.checkSelfPermission(context,
            android.Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(context,
                android.Manifest.permission.ACCESS_FINE_LOCATION)) {
            //Aqui coloca a ação caso a permissão esteja concedida
        } else {

            ActivityCompat.requestPermissions(context,
                    new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                    android.Manifest.permission.ACCESS_FINE_LOCATION);
            //Aqui coloca um alert/toast para dizer que a ação não pode ser executada sem permissão e fecha a activity
        }
    }
D

Olha onde estao os erros. Parece que é pq a classe nao é uma activity. Mas eu queria que fosse algo estático, pra acessar uma classe que é uma activity, precisa ir pelo intent correto?

if (ContextCompat.checkSelfPermission(context,
            android.Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(context,
                android.Manifest.permission.ACCESS_FINE_LOCATION)) {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, tempo, distancia, this.listener, null);
        } else {

            ActivityCompat.requestPermissions(context,
                    new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                    android.Manifest.permission.ACCESS_FINE_LOCATION);
            
            Toast.makeText(context,"Aprova ae sangue bom! para de frescura",Toast.LENGTH_LONG).show();
        }
    }

L

Não, o erro ocorre por que a solicitação para verificação exige um array de String e o que você tem é um inteiro.

D

onde? estou perdido.

sao 2 erros, mas la falava pra eu preencher com a activity.

nao entendi onde colocar esse array

D

olha só isso, este é o doc

ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.READ_CONTACTS},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);

esta pedindo thisActivity. dai eu fui e coloquei o contexto, que eu recebo la no inicio do metodo

D

estou indo por um tutorial na net. Mas nao sei pq esse LocationServices.API não consigo achar no android

public class Localiza extends AppCompatActivity implements
    GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_localiza);
    
}

private synchronized void callConnection(){

    if (mGoogleApiClient == null) {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
    }


}

protected void onStart() {
    mGoogleApiClient.connect();
    super.onStart();
}

protected void onStop() {
    mGoogleApiClient.disconnect();
    super.onStop();
}

@Override
public void onConnected(Bundle connectionHint) {

    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
            mGoogleApiClient);
    if (mLastLocation != null) {
        mLatitudeText.setText(String.valueOf(mLastLocation.getLatitude()));
        mLongitudeText.setText(String.valueOf(mLastLocation.getLongitude()));
    }

}

@Override
public void onConnectionSuspended(int i) {
    Log.i("LOG","onConnectionSuspended("+i+")");
}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

}

}

Criado 10 de abril de 2017
Ultima resposta 10 de abr. de 2017
Respostas 8
Participantes 2