Is ACCESS_FINE_LOCATION provided in the manifest, but always gets permission to refuse?

I'm currently trying to get the latitude and longitude of the user's current location. I have included the following permissions in the manifest. TargetSDK and min sdk - 23

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.name.app"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="false" /> <activity android:name=".SplashScreen" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainMenu" /> <activity android:name=".NeedToKnow" /> <activity android:name=".SelectTopic" /> <activity android:name=".DisplayTopicInformation"/> <activity android:name=".SelectCheckList" /> <activity android:name=".ViewCheckList"/> <activity android:name=".FindLocation"></activity> </application> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> </manifest> 

For this, I understand that I need to run a runtime check for permissions. However, when I do the following, I always get -1 in return. (PERMISSION_DENIED)

 int permissionCheck = ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION); 

Is there any step that I skip when trying to access current locations?

The full code is here:

 private String getZipcodeFromCurrentLocation() { int permissionCheck = ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION); String zip = null; Location location = null; LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { latitude = location.getLatitude(); longitude = location.getLongitude(); Log.i("updated lat", String.valueOf(latitude)); Log.i("updated lng", String.valueOf(longitude)); } }; try { if (PackageManager.PERMISSION_GRANTED == permissionCheck) { lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); } } catch (SecurityException e){ e.printStackTrace(); } return zip; } 
+5
source share
1 answer

If a user has disabled permission to host your application in the phone’s settings, you must request this permission. Below you will find sample code on how to do this.

 import android.Manifest; import android.app.Activity; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.v4.app.ActivityCompat; public class MyActivity extends Activity implements ActivityCompat.OnRequestPermissionsResultCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); boolean permissionGranted = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; if(permissionGranted) { // {Some Code} } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 200); } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case 200: { if(grantResults[0] == PackageManager.PERMISSION_GRANTED) { // {Some Code} } } } } } 

I also created a class that processes all of the above, and also returns the user's location. Here's the link: https://www.dropbox.com/s/2mkyjok6mpna2yw/GPS.java?dl=0 .

+8
source

Source: https://habr.com/ru/post/1242242/


All Articles