0

am using Android Studio 2.2.1 , user sdk - min ="18" max="24"
uses-permission

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Error - call requires permission which may be rejected by user
error line

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 1, this);

my full code declare here . Thank you

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements LocationListener  {

    private LocationManager locationManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R. layout.activity_main);
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 1, this);
    }

    @Override

    public void onLocationChanged(Location location) {
        String msg = "New Latitude: " + location.getLatitude()
                + "New Longitude: " + location.getLongitude();

        Toast.makeText(getBaseContext(), msg, Toast.LENGTH_LONG).show();

    }

    @Override
    public void onStatusChanged(String s, int i, Bundle bundle) {
        Toast.makeText(getBaseContext(), "Gps is STATUS CHANGED!! ",
                Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onProviderEnabled(String s) {
        Toast.makeText(getBaseContext(), "Gps is turned on!! ",
                Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onProviderDisabled(String s) {
        Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
        startActivity(intent);
        Toast.makeText(getBaseContext(), "Gps is turned off!! ",
                Toast.LENGTH_SHORT).show();

    }
}
basil
  • 21
  • 11
  • 1
    From Android 6.0 you have to request your permissions at run time, not when the app is installed. Read more about this on Android developers https://developer.android.com/training/permissions/requesting.html – Iulian Popescu Oct 17 '16 at 10:01

3 Answers3

1

Use NETWORK_PROVIDER to get location because many times GPS will give null

 m_locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0, this);
    m_location = m_locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

Add below permissions in manifest

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  • am add this two changes still not change now showing two line error – basil Oct 17 '16 at 10:07
  • locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 1, this); locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); – basil Oct 17 '16 at 10:07
1

You need to provide run time permission for Android Marshmallow.

Official guide: Click here

Additional help: Click here

Here's some coding guide.

In your onCreate method:

if (ActivityCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

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

} else{
   //   getLocationfromYourDevice();
}

Also add this code to get the result of granting/declining the permission.

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

    switch (requestCode) {
        case 1:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this,"GPS permission granted",Toast.LENGTH_LONG).show();

            //  getLocationfromYourDevice();

            } else {

                 // Close the app or disable the location function

            }
            break;
    }
}
Community
  • 1
  • 1
Sudip Podder
  • 830
  • 11
  • 25
1

Inside your activity

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

                GPSTracker gps = new GPSTracker(AlarmActivity.this);
                if (gps.canGetLocation()) {
                   String latitude = gps.getLatitude();
                   String longitude = gps.getLongitude();
                }
            } else {
                permissionsMashmellow.requestPermissions(PERMISSIONS, PERMISSION_ALL);
            }
}

 @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
       if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay! Do the

                GPSTracker gps = new GPSTracker(AlarmActivity.this);
                if (gps.canGetLocation()) {
                   String latitude = gps.getLatitude();
                   String longitude = gps.getLongitude();
                }

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
    }

add below code for requesting permission

public boolean hasPermissions(String... permissions) {
    if(VERSION.SDK_INT >= 23 && this.mContext != null && permissions != null) {
        String[] var2 = permissions;
        int var3 = permissions.length;

        for(int var4 = 0; var4 < var3; ++var4) {
            String permission = var2[var4];
            if(ActivityCompat.checkSelfPermission(this.mContext, permission) != 0) {
                return false;
            }
        }
    }

    return true;
}

public void requestPermissions(String[] PERMISSIONS, int PERMISSION_ALL) {
    ActivityCompat.requestPermissions((Activity)this.mContext, PERMISSIONS, PERMISSION_ALL);
}

GpsTracker.class for getting current loc

Community
  • 1
  • 1
Rissmon Suresh
  • 13,173
  • 5
  • 29
  • 38