最新消息:文章中包含代码时,请遵守代码高亮规范!

OnActivityResult方法不执行问题

Android Robin 7828浏览 0评论

做签名图片手势缩放旋转操作的时候,要取得旋转后的图片返回到上一个Activity进行显示,Activity之间的传值是第一个界面跳转的时候调用starActivityForResult方法,第二个Activity调用setResult方法,这样当第二个Activity finish()的时候,值就会传至上一个Activity,在OnActivityResult方法里面进行值的处理。开发的时候发现旋转后图片老是传不过来,通过调试发现,OnActivityResult方法没执行,所以没反应,上网搜索了一下发现,有这么几种情况会导致OnActivityResult方法不执行:

第一种就是把Activity的启动模式设置成singleTask,这是单独启动一个任务栈的意思,导致与上一个Activity之间的联系中断,所以会不执行。

第二种是常见的错误,就是请求码一定要设置成大于0才行。

问题是,上面这两种都不在我的范围之内,搜索很久都找不到解决的方法,后来把图片换成图片路径传到上一个Activity,这次成功了,总结就是开发的时候,Bitmap是不适宜来回传的,这样迟早会出问题,应该通过路径来传输,这就需要一个本地缓存。

代码如下:

Intent intent=new Intent(UserSignActivity.this, TouchImageViewActivity.class);
Drawable drawable=image_sign.getDrawable();
Bitmap bitmap =DrawableToBitmap.drawableToBitmap(drawable);
intent.putExtra("bitmap", bitmap);
UserSignActivity.this.startActivityForResult(intent, 3);

这是第一个Activity,启动的是 TouchImageViewActivity.class这个Activity

    Bitmap bitmap2 = img.CreatNewPhoto();
    String path=CreateBitmap.createFile(TouchImageViewActivity.this, bitmap2);
    Intent data = new Intent();
    data.putExtra("path", path);
    TouchImageViewActivity.this.setResult(3, data);
    System.out.println(getCallingActivity());
    TouchImageViewActivity.this.finish();

这是第二个Activity代码,原来data.putExtra里面放的是图片,现在换成路径正常

</pre>
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK
&& null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };

Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();

BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(picturePath, bmOptions);
int photoW = bmOptions.outWidth;
int photoH = bmOptions.outHeight;
int scaleFactor = 3;
int targetW = image_sign.getWidth();

int scaleX = photoW / targetW;
scaleFactor = scaleX;

bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = scaleFactor;
image_sign.setImageBitmap(BitmapFactory.decodeFile(picturePath,
bmOptions));
signPath = picturePath;

}else  {
String path=data.getStringExtra("path");
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, bmOptions);
int photoW = bmOptions.outWidth;
int photoH = bmOptions.outHeight;
int scaleFactor = 3;
int targetW = image_sign.getWidth();

int scaleX = photoW / targetW;
scaleFactor = scaleX;

bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = scaleFactor;
image_sign.setImageBitmap(BitmapFactory.decodeFile(path,
bmOptions));
signPath = path;
//   int width = bm.getWidth();
//   int height = bm.getHeight();
//   // 设置想要的大小
//   int newWidth = image_sign.getWidth();
//   int newHeight = image_sign.getHeight();
//   // 计算缩放比例
//   float scaleWidth = ((float) newWidth) / width;
//   float scaleHeight = ((float) newHeight) / height;
//   // 取得想要缩放的matrix参数
//   Matrix matrix = new Matrix();
//   matrix.postScale(scaleWidth, scaleHeight);
//   // 得到新的图片
//   Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width,
//   height, matrix, true);

//   bitmap=bm;
//   signPath=CreateBitmap.createFile(UserSignActivity.this,bitmap);
//   image_sign.setImageBitmap(bm);

//   Intent intent=new Intent();      //发送广播
//   intent.setAction("cn.zmit.finish");
//   sendBroadcast(intent);
}

}
<pre>

这就是OnActivityResult方法。希望以上问题可以对大家有帮助.

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/1097.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者wangbin的打赏,我们会更加努力!    如果您想成为作者,请点我

发表我的评论
取消评论

表情