Как установить изображение в качестве обоев программно?

Я разрабатываю приложение, в котором нужно установить изображение в качестве обоев.

Код:

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());
    }

Также я добавил следующее разрешение:

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

Но это не работает; файл существует на SD-карте. Где я допустил ошибку?


person user1166635    schedule 15.04.2012    source источник
comment
выбрасывается ли исключение?   -  person Jason Robinson    schedule 15.04.2012


Ответы (2)


Возможно, вам не хватает памяти, если ваше изображение большое. Вы можете убедиться в этом, прочитав логи Logcat. Если это так, попробуйте подогнать изображение под размер устройства примерно так:

    DisplayMetrics displayMetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    int height = displayMetrics.heightPixels;
    int width = displayMetrics.widthPixels << 1; // best wallpaper width is twice screen width

    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, width, height);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    Bitmap decodedSampleBitmap = BitmapFactory.decodeFile(path, options);

    WallpaperManager wm = WallpaperManager.getInstance(this);
    try {
        wm.setBitmap(decodedSampleBitmap);
    } catch (IOException e) {
        Log.e(TAG, "Cannot set image as wallpaper", e);
    }
person mbakulin    schedule 26.06.2012

File f = new File(Environment.getExternalStorageDirectory(), "1.jpg");
String path = f.getAbsolutePath();
File f1 = new File(path);

if(f1.exists()) {
    Bitmap bmp = BitmapFactory.decodeFile(path);
    BitmapDrawable bitmapDrawable = new BitmapDrawable(bmp);
    WallpaperManager m=WallpaperManager.getInstance(this);

    try {
        m.setBitmap(bmp);
    } catch (IOException e) {
        e.printStackTrace();
    }
} 

Откройте файл Androidmanifest.xml и добавьте разрешение, например...

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

Попробуйте это и дайте мне знать, что произойдет ..

person Balamurugan    schedule 04.06.2012