Cómo obtener la ruta de la imagen de las imágenes almacenadas en la tarjeta SD

¿Es posible obtener la ruta de todas las imágenes que están almacenadas en la tarjeta SD de mi teléfono Android? ¿También es posible verificar otras imágenes almacenadas en la tarjeta SD o en la memoria interna? Actualmente estoy haciendo esto:

Cursor cur = this.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null,null);  
        startManagingCursor(cur);  
        cur.moveToFirst();
        while (cur.moveToNext()) {
            String str = cur.getString(cur.getColumnIndex(MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME));
            Log.e("#########",str);
        }

Esto parece que devuelve los nombres de los directorios, también he visto este código:

File images = Environment.getDataDirectory();  
        File[] imagelist = images.listFiles(new FilenameFilter(){  
        public boolean accept(File dir, String name)  
        {  
            return ((name.endsWith(".jpg"))||(name.endsWith(".png")));  
        }  
    });  
        String []mFiles = new String[imagelist.length];  

        for(int i= 0 ; i< imagelist.length; i++)  
        {  
            mFiles[i] = imagelist[i].getAbsolutePath();  
        }  
        Uri[] mUrls = new Uri[mFiles.length];  

        for(int i=0; i < mFiles.length; i++)  
        {  
            mUrls[i] = Uri.parse(mFiles[i]);  
            Log.e("###############","MURIS: "+mUrls[i].getEncodedPath());
        }     

pero esto arroja una excepción de puntero nulo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta