¿Cómo configurar la imagen como fondo de pantalla programáticamente?

He estado desarrollando la aplicación que necesita establecer una imagen como fondo de pantalla.

Código:

WallpaperManager m=WallpaperManager.getInstance(this);

String s=Environment.getExternalStorageDirectory().getAbsolutePath()+"/1.jpg";
File f=new File(s);
Log.e("exist", String.valueOf(f.exists()));
try {
        InputStream is=new BufferedInputStream(new FileInputStream(s));
        m.setBitmap(BitmapFactory.decodeFile(s));

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Log.e("File", e.getMessage());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Log.e("IO", e.getMessage());
    }

También he añadido el siguiente permiso:

<uses-permission android:name="android.permission.SET_WALLPAPER" />

Pero no funciona; el archivo existe en sdcard. ¿Dónde he cometido un error?