【问题标题】:How to set image as wallpaper programmatically?如何以编程方式将图像设置为墙纸?
【发布时间】:2012-04-15 07:21:44
【问题描述】:

我一直在开发需要将图像设置为墙纸的应用程序。

代码:

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" />

但它不起作用;该文件存在于 sdcard 上。我在哪里犯了错误?

【问题讨论】:

  • 是否抛出异常?

标签: java android wallpaper


【解决方案1】:

如果您的图像很大,您可能会耗尽内存。您可以通过阅读 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);
    }

【讨论】:

    【解决方案2】:
    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" />
    

    试试这个,让我知道会发生什么..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多