简体   繁体   English

com.android.camera.action.CROP在Motorola Defy上设置壁纸

[英]com.android.camera.action.CROP sets wallpaper on Motorola Defy

I'm working on an Android 2.1+ app and trying to take a photo and then send the results of that intent to a crop function. 我正在开发Android 2.1+应用程序并尝试拍摄照片,然后将该意图的结果发送到裁剪功能。 It seems to work on the Sony Ericsson xmp, but when i put it on a Moto Defy, the crop function fails because it is seemingly ignoring the file name i put in for the data, and instead looks at /data/data/com.motorola.gallery/files/temp-wallpaper for some reason. 它似乎适用于索尼爱立信xmp,但是当我把它放在Moto Defy上时,裁剪功能失败了,因为它似乎忽略了我为数据输入的文件名,而是查看/data/data/com.motorola.gallery/files/temp-wallpaper由于某种原因。 This has the result of the crop function not returning with any data, and the image i just took gets set as the wallpaper image of the phone! 这导致裁剪功能没有返回任何数据,我刚拍摄的图像被设置为手机的壁纸图像! Here's some sample code: 这是一些示例代码:

public static final String SD_CARD_TEMP_DIR = Environment.getExternalStorageDirectory() + File.separator;
public static final String SD_CARD_TEMP_ORIG = SD_CARD_TEMP_DIR + "origPhoto.jpg";
public static final String SD_CARD_TEMP_CROP = SD_CARD_TEMP_DIR + "croppedPhoto.jpg";

Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(Uri.fromFile(new File(Const.SD_CARD_TEMP_ORIG)), "image/*");
intent.putExtra("crop", true);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 512);
intent.putExtra("outputY", 512);
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Const.SD_CARD_TEMP_CROP)));

The output from this is something like this: 这样的输出是这样的:

INFO/ActivityManager(1242): Starting activity: Intent { act=com.android.camera.action.CROP dat=file:///sdcard/origPhoto.jpg typ=image/* cmp=com.motorola.gallery/.CropImage (has extras) }
INFO/ActivityManager(1242): Start proc com.motorola.gallery:CropImage for activity com.motorola.gallery/.CropImage: pid=25733 uid=10014 gids={1015, 9003, 9007, 9008, 2001, 3003}
WARN/CropImage(25733): CropImg mBitmap was null, retreive frm URIfile:///sdcard/origPhoto.jpg
ERROR/CropImage(25733): got IOException java.io.FileNotFoundException: /data/data/com.motorola.gallery/files/temp-wallpaper 
INFO/ActivityManager(1242): Displayed activity com.motorola.gallery/.CropImage: 5664 ms (total 5664 ms)
WARN/System.err(25672): java.io.FileNotFoundException: /sdcard/croppedPhoto.jpg
DEBUG/(25672): unable to unlink '/sdcard/croppedPhoto.jpg': No such file or directory (errno=2)

Does anyone have any experience with this issue, or ideas for a work around? 有没有人对这个问题有任何经验,或者想要解决这个问题?

I'd stay away from the Intent you're using, because it isn't standard, so may not be supported everywhere, 我会远离你正在使用的意图,因为它不是标准的,因此可能无法在任何地方支持,

From the extra-data you're using, I believe you're doing a fixed-size crop, and don't need any user input. 根据您使用的额外数据,我相信您正在进行固定大小的裁剪,并且不需要任何用户输入。 This makes the solution quite simple, as long as you don't run out of memory. 这使得解决方案非常简单,只要您没有内存不足。

  1. Load the image via BitmapFactory.decodeFile . 通过BitmapFactory.decodeFile加载图像。 You can pass in a BitmapFactory.options object to optionally scale the image at load time. 您可以传入BitmapFactory.options对象,以便在加载时可选地缩放图像。
  2. Create a cropped bitmap with Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height) 使用Bitmap.createBitmap创建裁剪位图(位图源,int x,int y,int width,int height)
  3. Write it out to disk with Bitmap.compress 使用Bitmap.compress将其写入磁盘

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM