Android 安卓完成重启应用程序

Android 安卓完成重启应用程序,android,android-intent,Android,Android Intent,我正在开发一个应用程序,它允许用户从图库中选择一张图片,然后我启动一个活动来裁剪它 我想将裁剪后的图像发送回呼叫活动 这两个活动都扩展了AppCompative活动 呼叫活动: @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == SELECT_PICTU

我正在开发一个应用程序,它允许用户从图库中选择一张图片,然后我启动一个活动来裁剪它

我想将裁剪后的图像发送回呼叫活动

这两个活动都扩展了AppCompative活动

呼叫活动:

@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
    }
});
@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);
    }
}
在“裁剪图像”活动中,我有一个按钮,单击该按钮应返回到调用活动:

@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
    }
});
@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);
    }
}

有时位图返回正确,但有时不正确,应用程序重新启动时不会出错。为什么会这样?putExtra是否与位图大小或其他内容有关?

您可以尝试替换

AppcompatActivity.this.finish() 
其中AppcompatActivity是您的类名

用于:

或者,在调用活动中创建一个方法:

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

意图中作为额外传递的数据长度有一个限制。尝试不传递数据字符串值;相反,您应该将图像保存为临时文件,在intent中传递路径,然后从调用活动加载图像,或者您可以将数据字符串保存在静态帮助器类中

在“裁剪活动”中,从以下位置保存位图代码:

在调用方活动中:

@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
    }
});
@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);
    }
}