在Droid X上裁剪图片会将结果设置为壁纸

4

我在尝试从用户的图库中裁剪图像时,我的程序遇到了一些问题。目前这个问题只出现在Droid X上运行时,而在原始moto Droid上的运行正常。

基本上问题出现在裁剪意图被执行时。一旦用户裁剪照片并点击保存按钮,它就会用已保存的裁剪图像替换主屏幕上的壁纸!但它不会在moto droid或模拟器上这样做。下面是裁剪和保存图片到SD卡的代码:

@Override
public void onActivityResult(int requestCode,int resultCode,Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode ==1){
if (resultCode == Activity.RESULT_OK) {
  Intent i = new Intent("com.android.camera.action.CROP");
  i.setData(data.getData());
  i.putExtra("noFaceDetection", true);
  i.putExtra("outputX", 80);
  i.putExtra("outputY", 80);
  i.putExtra("aspectX", 1);
  i.putExtra("aspectY", 1);
  i.putExtra("scale", true);


if(selectedImageString == null){
      ContentValues values = new ContentValues();
      values.put(android.provider.MediaStore.Images.Media.TITLE, "Temp_Icon1");
      values.put(android.provider.MediaStore.Images.Media.BUCKET_ID, "Temp_Icons");
      values.put(android.provider.MediaStore.Images.Media.BUCKET_DISPLAY_NAME,"Temp_Icons");
      values.put(android.provider.MediaStore.Images.Media.IS_PRIVATE, 1);
      selectedImageString = getContentResolver().insert(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values).toString();
  }
  i.putExtra("output", Uri.parse(selectedImageString));
  startActivityForResult(i, 2);
}
}
 if(requestCode == 2){
 if (resultCode == Activity.RESULT_OK){
  uriPath = Uri.parse(selectedImageString);
  imageView.setImageURI(uriPath);
 }
}

}

有人可以帮我解决这个问题吗?


我在我的Droid 2应用程序中遇到了同样的问题。有什么想法吗?我注意到Droid 2上的联系人应用程序没有更新剪裁后的壁纸的副作用,因此我们的应用程序肯定有办法避免这种情况... - manisha
3个回答

3
我可以确认即使使用上述提到的“输出”选项,Droid X 也会对我产生同样的影响。目前我还没有找到解决办法,但我会考虑在 Droid X 手机上封锁裁剪功能。可惜这里不起作用。
顺便说一下,您可以尝试以下方法...
i.putExtra("return-data", true);

这将在返回的意图中返回图像。您可以使用以下方式访问它...

BitMap BM = data.getParcelableExtra("data");

然而,Galaxy S系列手机不支持此功能。无论如何都会返回一个空包裹。因此,我目前还没有找到好的解决方案。


1

可能是因为您在调用裁剪意图时没有指定数据放置的位置,导致它覆盖了图像。

我认为裁剪意图是内部代码,所以我们不能确定(顺便说一下,并非所有手机都有裁剪意图)

当我调用裁剪意图时,我会传递

i.putExtra("output", croppedOutputUri);

谢谢,我决定将裁剪能力限制在我可以物理测试并确认其按照我需要的方式工作的手机上。 - Brian
@losSebos建议使用MediaStore.EXTRA_OUTPUT而不是"output"。 - Jonathan

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接