Search code examples
androidandroid-permissions

Android: Dialog to ask for WRITE_EXTERNAL_STORAGE not shown


I have an android application that needs following permission to run.

ACCESS_FINE_LOCATION, ACCESS_WIFI_STATE, WRITE_EXTERNAL_STORAGE, RECORD_AUDIO

My AndroidManifest.xml is:

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

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/>


    <application
        ...
</manifest>

My Splash activity is:

public class SplashActivity extends Activity {
    private static final String TAG = SplashActivity.class.getSimpleName();
    private static int SPLASH_TIME_OUT = 10000;
    private final int REQ_SOLVE_SERVICES_CODE = 15005;
    private int REQ_PERM_CODE = 1010;
    public static AudioInput AUDIO_INPUT;
    private static final String[] requiredPermissions = new String[] { ACCESS_FINE_LOCATION, ACCESS_WIFI_STATE, WRITE_EXTERNAL_STORAGE, RECORD_AUDIO};


    private void requestPermissionIfNeeded() {
        boolean allGranted = allPermissionsGranted(this, requiredPermissions);
        if (!allGranted) {
            ActivityCompat.requestPermissions(this,
                    requiredPermissions, REQ_PERM_CODE);
        } else {
            //If all permissions are granted, check that PlayServices are available
            checkPlayServices();
        }
    }

    private void initializeGlass() {

    }




    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQ_PERM_CODE) {
            boolean allGranted = true;
            for (int result : grantResults) {
                if (result == PackageManager.PERMISSION_DENIED) {
                    allGranted = false;
                    break;
                }
            }
            if (!allGranted) {

            } else {
                //If all permissions are granted, check that PlayServices are available
                checkPlayServices();
            }
        }

    }


    private void checkPlayServices() {
        int status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this);
        if (status != ConnectionResult.SUCCESS) {
            if (GoogleApiAvailability.getInstance().isUserResolvableError(status)) {
                GoogleApiAvailability.getInstance().getErrorDialog(this, status, REQ_SOLVE_SERVICES_CODE).show();
            } else {
                Toast.makeText(this, "Bus Sewa can not run without GoolgeServices.", Toast.LENGTH_SHORT).show();
                finish();
            }
        } else {
            bootGlasAndContinue();

        }
    }


}

Code for all permission granted:

public static boolean allPermissionsGranted(Context context, String[] permissions) {
    for (String perm : permissions) {
        if (ContextCompat.checkSelfPermission(context, perm) == PackageManager.PERMISSION_DENIED) {
            return false;
        }
    }
    return true;
}

When an application starts it does ask for permission to access fine location. It does ask for permission to record audio. However, it doesn't ask for permission for write external storage.

I have created a small demo application. This code seems to work there. What am I missing?

Final Edit: Removed irrelevant code.


Solution

  • It worked:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="replace"/>
    

    Hockey app was a problem.