Как избежать перезапуска приложения, когда активность возвращается с RESULT_CANCELED - PullRequest
0 голосов
/ 06 мая 2020

У меня есть приложение, в котором я выбираю изображение из камеры, используя намерение «Intent takePhotoIntent = new Intent (MediaStore.ACTION_IMAGE_CAPTURE);»

На большинстве устройств работает, но на моем Samsung Galaxy view 18,4 (Android 5.1.1) работать не будет. OnActivityResult вызывается с кодом результата -1 (RESULT_CANCELED), и я вижу, что изображение размещено правильно там, где я ожидал, но поскольку действие отменено, приложение перезапускается и приложение перестает работать. Если бы был способ не перезапускать приложение после вызова onActivityResult, я мог бы позволить ему работать, но перезапуск приложения приводил к сбою приложения.

В моем основном приложении:

  private static final int PICK_IMAGE_ID1 = 234; // the number doesn't matter

    public void onPickImage(View view) {
        ////       MODEL=getModel(4);
        PicView=view;
        layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        Intent chooseImageIntent = com.npwithgrap.ImagePicker.getPickImageIntent(context);
        startActivityForResult(chooseImageIntent, PICK_IMAGE_ID1);
    }


    public void onActivityResult(int requestCode, int resultCode, Intent data)
        {
        String fejl="";
        if(resultCode != RESULT_CANCELED)
            {
            fejl ="error";
            }
        switch (requestCode)
            {
            case PICK_IMAGE_ID1:

                //               MODEL = getModel(4);
                bitmap = com.npwithgrap.ImagePicker.getImageFromResult(this, resultCode, data);
                imageManager.showImage(bitmap);  
                searchTitel.np.AtRes(bitmap,CV);  //call to a place where the bitmap is used
                break;
            default:
                super.onActivityResult(requestCode, resultCode, data);
                break;
        }
    }

В ImagePicker:

public class ImagePicker {

    private static final int DEFAULT_MIN_WIDTH_QUALITY = 1100;        // min pixels
    private static final String TAG = "ImagePicker";
    private static final String TEMP_IMAGE_NAME = "tempImage";
    private static final int [] picsize={2100,2970};
    public static int minWidthQuality = DEFAULT_MIN_WIDTH_QUALITY;
    public static Intent getPickImageIntent(Context context)
    {
        Intent chooserIntent = null;
        Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        takePhotoIntent.putExtra("return-data", true);
        takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(context)));
        takePhotoIntent.putExtra(MediaStore.EXTRA_SIZE_LIMIT,picsize);
        chooserIntent = Intent.createChooser(takePhotoIntent, "NodeProgram Grap Billede");
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentList.toArray(new Parcelable[]{}));
        }
        return chooserIntent;
    }

public static File getTempFile(Context context)
    {
        File imageFile = new File(context.getExternalCacheDir(), TEMP_IMAGE_NAME);
        imageFile.getParentFile().mkdirs();
        return imageFile;
    }
// getImageFromResult is for use also if it not was for Camera)
public static Bitmap getImageFromResult(Context context, int resultCode, Intent imageReturnedIntent)
    {
        Log.d(TAG, "getImageFromResult, resultCode: " + resultCode);
        Bitmap bm = null;
        File imageFile = getTempFile(context);
        if (resultCode == Activity.RESULT_OK)
        {
            Uri selectedImage;
            boolean isCamera = (imageReturnedIntent == null || imageReturnedIntent.getData() == null  || imageReturnedIntent.getData().equals(Uri.fromFile(imageFile)));
            if (isCamera)
            {     /** CAMERA **/
                selectedImage = Uri.fromFile(imageFile);
            }
            else
            {            /** ALBUM **/
                selectedImage = imageReturnedIntent.getData();
            }
            Log.d(TAG, "selectedImage: " + selectedImage);
            bm = getImageResized(context, selectedImage);
//            int rotation = getRotation(context, selectedImage, isCamera);
            int rotation=0;
            if(bm.getWidth()>bm.getHeight())
                rotation=90;
            bm = rotate(bm, rotation);
        }
        return bm;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...