Android 通过代码设置壁纸

Android 通过代码设置壁纸,android,image,out-of-memory,crop,wallpaper,Android,Image,Out Of Memory,Crop,Wallpaper,我正在尝试制作一个应用程序,该应用程序还可以让用户选择他想要设置的壁纸。我通过给画廊打电话来解决这个问题。一旦用户选择了一个特定的图像,图像的数据路径就会返回给我,然后我通过将图像设置到imageview上预览给用户 当图像大小(和/或分辨率)超过android预期时,问题就会出现。这会导致我的模块出现故障 似乎这还不够,当用户尝试选择其他墙纸时(在我的测试案例中,“其他”墙纸的大小也大于700kb),然后应用程序崩溃,出现“OutOfMemoryException” 帮帮我,伙计们 对于画廊目

我正在尝试制作一个应用程序,该应用程序还可以让用户选择他想要设置的壁纸。我通过给画廊打电话来解决这个问题。一旦用户选择了一个特定的图像,图像的数据路径就会返回给我,然后我通过将图像设置到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);
所以我有两个问题要处理:

  • 如何在将图像设置为壁纸之前裁剪图像
  • 无法理解y OutOfMemoryException被抛出,因为我的图像大小都没有超过1mb。。。如果我没弄错的话,我猜N1情况下的虚拟机预算是24Mb

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

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


    有些文章提到内存泄漏。。。但是,在上述情况下,内存泄漏是否可能耗尽VMs预算?顺便问一下,您是否找到了“在将图像设置为壁纸之前如何裁剪图像”的解决方案?我正在寻找一个解决方案,使用作物用户界面,而不是通过代码裁剪。嘿,Fedor!!!Thanx很多伙计。。。正是我一直在寻找的东西。。。几乎解决了我所有的问题。。。你是摇滚乐手!!!