2048 is not fixed. This is actually device dependent (GL_MAX_TEXTURE_SIZE). The S4 I am testing on reports limit to be 4096. And 2048 might still be too large on old devices. 

Also if you really want to scale down an image by default, it might be easier to set the inSampleSize irrespective of the needRetry parameter. You can get size of bitmap by passing inJustDecodeBounds and adjusting inSampleSize initially