【问题标题】:setting wallpaper through code通过代码设置壁纸
【发布时间】:2010-06-14 05:07:04
【问题描述】:

我正在尝试制作一个应用程序,该应用程序还可以让用户选择他想要设置的壁纸。我通过调用 Gallery Intent 来解决这个问题。一旦用户选择了特定的图像,图像的数据路径就会返回给我,然后我通过将图像设置到 imageview 上来预览给用户。

当图像大小(和/或分辨率)大于 android 的预期时,问题就会出现。这导致我的模块失败。

如果这还不够,当用户尝试选择其他壁纸时(在我的测试案例中,“其他”壁纸的大小也是 >700kb)然后应用程序因“OutOfMemoryException”而崩溃......

各位帮帮我!!!

对于我使用的画廊意图:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),SELECT_IMAGE);

设置我使用的壁纸:

InputStream is = getContentResolver().openInputStream(Uri.parse(uri_returned_from_intent)); 
Bitmap bgImage = BitmapFactory.decodeStream(is);//OutOfMemory error thrown here
setWallpaper(bgImage);

所以我有两个问题要处理:

  1. 如何在将图像设置为墙纸之前对其进行裁剪...
  2. 无法理解抛出了 OutOfMemoryException,因为我的图像大小都没有超过 1mb...如果 m 没记错的话,我猜 N1 的 VM 预算是 24Mb...

【问题讨论】:

  • 还有一些文章提到了内存泄漏......但是在上述情况下内存泄漏是否有可能耗尽 VM 预算??
  • 顺便说一句,您是否找到“如何在将图像设置为墙纸之前裁剪图像”的解决方案?我正在寻找一种使用裁剪用户界面而不是通过代码裁剪的解决方案。

标签: android image out-of-memory crop wallpaper


【解决方案1】:

您应该使用 inSampleSize 选项进行解码以减少内存消耗。

另一个选项 inJustDecodeBounds 可以帮助您找到正确的 inSampleSize 值

【讨论】:

  • 嘿费多尔!!!非常感谢老兄......正是我正在寻找的东西......几乎解决了我所有的问题......你摇滚老兄!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
相关资源
最近更新 更多