Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Call requires permissions that may be rejected by user

I am trying to make an application that sends location updates of a user after every five minutes. I suppose my code is working just fine but i get an error regarding the permissions that are being used by the application. I am pretty sure that i have added the permissions in the manifest file. Can someone tell me what's wrong? Here is my code.

MainActivity.java

LocationManager locationManager ; String provider;  @Override public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);      // Getting LocationManager object     locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);      // Creating an empty criteria object     Criteria criteria = new Criteria();      // Getting the name of the provider that meets the criteria     provider = locationManager.getBestProvider(criteria, false);      if(provider!=null && !provider.equals("")){          // Get the location from the given provider         Location location = locationManager.getLastKnownLocation(provider);         locationManager.requestLocationUpdates(provider,5*60*1000,0,this);          if(location!=null)             onLocationChanged(location);         else             Toast.makeText(getBaseContext(), "Location can't be retrieved", Toast.LENGTH_SHORT).show();      }else{         Toast.makeText(getBaseContext(), "No Provider Found", Toast.LENGTH_SHORT).show();     } }  @Override public boolean onCreateOptionsMenu(Menu menu) {     getMenuInflater().inflate(R.menu.main, menu);     return true; }  @Override public void onLocationChanged(Location location) {     // Getting reference to TextView tv_longitude     TextView tvLongitude = (TextView)findViewById(R.id.tv_longitude);      // Getting reference to TextView tv_latitude     TextView tvLatitude = (TextView)findViewById(R.id.tv_latitude);      // Setting Current Longitude     tvLongitude.setText("Longitude:" + location.getLongitude());      // Setting Current Latitude     tvLatitude.setText("Latitude:" + location.getLatitude() ); }  @Override public void onProviderDisabled(String provider) {     // TODO Auto-generated method stub }  @Override public void onProviderEnabled(String provider) {     // TODO Auto-generated method stub }  @Override public void onStatusChanged(String provider, int status, Bundle extras) {     // TODO Auto-generated method stub } 

}

I am getting an error as Call requires permission which may be rejected by user in these lines-

Location location = locationManager.getLastKnownLocation(provider);         locationManager.requestLocationUpdates(provider,5*60*1000,0,this); 

My AndroidManifest is like this

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET"/>  <application     android:icon="@mipmap/ic_launcher"     android:label="@string/app_name"     android:theme="@style/AppTheme" >     <activity         android:name=".MainActivity"         android:label="@string/title_activity_main" >         <intent-filter>             <action android:name="android.intent.action.MAIN" />             <category android:name="android.intent.category.LAUNCHER" />         </intent-filter>     </activity> </application> 

like image 274
Aman Verma Avatar asked Oct 25 '15 09:10

Aman Verma


1 Answers

Which SDK do you use? If you use Marshmallow, then you need to check that the user has granted permission for every location call.

Take a look Here.

You should do something like this:

  if (ContextCompat.checkSelfPermission( this,android.Manifest.permission.ACCESS_COARSE_LOCATION ) != PackageManager.PERMISSION_GRANTED ) {     ActivityCompat.requestPermissions(         this,         new String [] { android.Manifest.permission.ACCESS_COARSE_LOCATION },         LocationService.MY_PERMISSION_ACCESS_COURSE_LOCATION     ); } 

request permission if you dont have it already.

check the link above for more info.

like image 87
Shahar Avatar answered Oct 11 '22 12:10

Shahar