2015-10-21 72 views
0

我正在开发一个应用程序,该应用程序允许用户从图库中选择图片,然后开始一个活动以进行裁剪。安卓完成有时重新启动应用程序

我想将裁剪后的图像发送回调用活动。

这两个活动都扩展AppCompatActivity。

调用活动:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_PICTURE) {  

      // start image crop activity 
      String dataString = data.getDataString();  
      Intent intent=new Intent(this, CropPhotoActivity.class); 
      intent.putExtra("SELECTED_PICTURE_FOR_CROP", dataString); 
      startActivityForResult(intent, CROP_PICTURE);  
     } 
     else if(requestCode == CROP_PICTURE) { 
      // get cropped bitmap 
      Bitmap bitmap = (Bitmap) data.getParcelableExtra("CROPPED_IMAGE"); 
      profilePhoto.setImageBitmap(bitmap); 
     } 
    } 
} 

在裁剪图像的活动,我有一个按钮,在点击要返回到调用活动:

Button okButton = (Button)findViewById(R.id.ok_button); 
okButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent returnIntent = new Intent(); 
     returnIntent.putExtra("CROPPED_IMAGE", cropped_bitmap); 
     setResult(RESULT_OK, returnIntent); 
     finish(); // sometimes restarts app 
    } 
}); 

有时位图被正确返回,而有时它不会和应用程序重新启动没有错误。这是为什么发生? putExtra与位图大小或其他任何事情有关吗?

回答

0

你可以尝试替换

AppcompatActivity.this.finish() 

(其中AppcompatActivity是你的类名)

为:

finish(); // sometimes restarts app 

或者,创建在调用活动的方法:

public static void cropComplete(Activity activity) 
{ 
    activity.startActivity(activity, AnotherActivity.class); 
    activity.finish(); 
} 
0

Theres的数据长度限制作为额外的意图传递。尽量不要传递dataString的值;相反,您应该将图像保存为临时文件,在意图中传递路径,然后从调用活动中加载图像(或者您可以将dataString保存在静态助手类中)。

在作物活性(从Save bitmap to location保存位图码):

// Save bitmap 
String filename = "tempImage.png"; 
File sd = Environment.getExternalStorageDirectory(); 
File dest = new File(sd, filename); 
FileOutputStream out = null; 
try { 
    out = new FileOutputStream(dest); 
    bmp.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance 
// PNG is a lossless format, the compression factor (100) is ignored 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    try { 
     if (out != null)out.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

// Get image file path 
String path = dest.getAbsolutePath(); 

// Set result with image path 
Intent returnIntent = new Intent(); 
returnIntent.putExtra("CROPPED_IMAGE_PATH", path); 
setResult(RESULT_OK, returnIntent); 
finish(); 

在呼叫者活性:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
if (resultCode == RESULT_OK) { 
    if(requestCode == CROP_PICTURE) { 
     // Get image file path 
     String imagePath = data.getStringExtra("CROPPED_IMAGE_PATH"); 

     // Load image 
     Bitmap bitmap = BitmapFactory.decodeFile(imagePath); 
    } 
} 
相关问题