Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gallery has stopped while cropping image in kitkat Nexus7

Problem: I am fetching image from gallery and after that cropped that image and its working perfect in all device. But it is giving me error while running in Nexus 7 kitkat since i have checked build version for it with "Gallery Stopped" error. I have implemented code and all other neccessary permission in manifest file still not getting response. So can anybody resolve this?

Here is my Code:

 final String[] items = new String[] { "Take from camera",
            "Select from gallery" };
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.select_dialog_item, items);
    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    builder.setTitle("Select Image");
    builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) { // pick from
                                                                // camera
            if (item == 0) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                mImageCaptureUri = Uri.fromFile(new File(Environment
                        .getExternalStorageDirectory(), "tmp_avatar_"
                        + String.valueOf(System.currentTimeMillis())
                        + ".jpg"));

                intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,
                        mImageCaptureUri);

                try {
                    intent.putExtra("return-data", true);

                    startActivityForResult(intent, PICK_FROM_CAMERA);
                } catch (ActivityNotFoundException e) {
                    e.printStackTrace();
                }
            } else { // pick from file

                Intent intent;

                if (Build.VERSION.SDK_INT < 19) {
                    intent = new Intent();
                    intent.setAction(Intent.ACTION_GET_CONTENT);
                    intent.setType("*/*");
                    startActivityForResult(Intent.createChooser(intent,
                            "Complete action using"), PICK_FROM_FILE);
                } else {
                    intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                    intent.addCategory(Intent.CATEGORY_OPENABLE);
                    intent.setType("*/*");
                    startActivityForResult(Intent.createChooser(intent,

                    "Complete action using"), PICK_FROM_FILE);
                }
                /*
                 * Intent intent = new Intent();
                 * 
                 * intent.setType("image/*");
                 * intent.setAction(Intent.ACTION_GET_CONTENT);
                 * 
                 * startActivityForResult(Intent.createChooser(intent,
                 * "Complete action using"), PICK_FROM_FILE);
                 */
            }
        }
    });

    final AlertDialog dialog = builder.create();

    btnTakephoto.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.show();
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK)
        return;

    switch (requestCode) {
    case PICK_FROM_CAMERA:
        doCrop();

        break;

    case PICK_FROM_FILE:

        if (Build.VERSION.SDK_INT < 19) {
            mImageCaptureUri = data.getData();

        } else {
            mImageCaptureUri = data.getData();
            ParcelFileDescriptor parcelFileDescriptor;
            try {
                parcelFileDescriptor = getContentResolver()
                        .openFileDescriptor(mImageCaptureUri, "r");
                FileDescriptor fileDescriptor = parcelFileDescriptor
                        .getFileDescriptor();
                myBitmap = BitmapFactory
                        .decodeFileDescriptor(fileDescriptor);
                parcelFileDescriptor.close();

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        doCrop();

        break;

    case CROP_FROM_CAMERA:
        Bundle extras = data.getExtras();

        if (extras != null) {
            myBitmap = extras.getParcelable("data");

        }

        File f = new File(mImageCaptureUri.getPath());

        if (f.exists()) {
            f.delete();
        }

        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        myBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);

        byteArray = stream.toByteArray();

        Intent n = new Intent();
        n.setClass(getApplicationContext(), EffectsActivity.class);
        n.putExtra("picture", byteArray);
        startActivity(n);
        break;

    }
}

private void doCrop() {
    final ArrayList<CropOption> cropOptions = new ArrayList<CropOption>();

    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setType("image/*");

    List<ResolveInfo> list = getPackageManager().queryIntentActivities(
            intent, 0);

    int size = list.size();

    if (size == 0) {
        Toast.makeText(this, "Can not find image crop app",
                Toast.LENGTH_SHORT).show();

        return;
    } else {
        if (mImageCaptureUri != null) {
            intent.setData(mImageCaptureUri);
        }

        intent.putExtra("outputX", 350);
        intent.putExtra("outputY", 350);
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        intent.putExtra("scale", true);
        intent.putExtra("return-data", true);

        if (size == 1) {
            Intent i = new Intent(intent);
            ResolveInfo res = list.get(0);

            i.setComponent(new ComponentName(res.activityInfo.packageName,
                    res.activityInfo.name));

            startActivityForResult(i, CROP_FROM_CAMERA);
        } else {
            for (ResolveInfo res : list) {
                final CropOption co = new CropOption();

                co.title = getPackageManager().getApplicationLabel(
                        res.activityInfo.applicationInfo);
                co.icon = getPackageManager().getApplicationIcon(
                        res.activityInfo.applicationInfo);
                co.appIntent = new Intent(intent);

                co.appIntent
                        .setComponent(new ComponentName(
                                res.activityInfo.packageName,
                                res.activityInfo.name));

                cropOptions.add(co);
            }

            CropOptionAdapter adapter = new CropOptionAdapter(
                    getApplicationContext(), cropOptions);

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Choose Crop App");
            builder.setAdapter(adapter,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int item) {
                            startActivityForResult(
                                    cropOptions.get(item).appIntent,
                                    CROP_FROM_CAMERA);
                        }
                    });

            builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
                @Override
                public void onCancel(DialogInterface dialog) {

                    if (mImageCaptureUri != null) {
                        getContentResolver().delete(mImageCaptureUri, null,
                                null);
                        mImageCaptureUri = null;
                    }
                }
            });

            AlertDialog alert = builder.create();

            alert.show();
        }
    }

CropAction:

 public class CropOption {
  public CharSequence title;
  public Drawable icon;
  public Intent appIntent;
 }

CropOptionAdapter.java

public class CropOptionAdapter extends ArrayAdapter<CropOption> {
private ArrayList<CropOption> mOptions;
private LayoutInflater mInflater;

public CropOptionAdapter(Context context, ArrayList<CropOption> options) {
    super(context, R.layout.crop_selector, options);

    mOptions = options;

    mInflater = LayoutInflater.from(context);
}

@Override
public View getView(int position, View convertView, ViewGroup group) {
    if (convertView == null)
        convertView = mInflater.inflate(R.layout.crop_selector, null);

    CropOption item = mOptions.get(position);

    if (item != null) {
        ((ImageView) convertView.findViewById(R.id.iv_icon))
                .setImageDrawable(item.icon);
        ((TextView) convertView.findViewById(R.id.tv_name))
                .setText(item.title);

        return convertView;
    }

    return null;
}
    }
like image 549
Piyush Avatar asked Mar 22 '14 09:03

Piyush


People also ask

How do I crop an image in the media library?

It’s possible to crop an image in the Media Library by editing it, it can be done without a header image upload setting. This test will let you know if Ultra is causing the error or not.

How to add image Cropper to Android app using Gradle?

Note that select Java as the programming language. Navigate to the Gradle Scripts > build.gradle (Module:app) and add the below dependency in the dependencies section. api ‘com.theartofdev.edmodo:android-image-cropper:2.8.+’ // cropped image into ImageView. Add the below permission to the AndroidManifest.xml file.

How to fix “Unfortunately gallery has stopped” error in Android?

Fix “Unfortunately, Gallery has stopped” Error in Android 2.1. Method 1: Clearing Cache and Data of Gallery and Camera app 2.2. Method 2: Clearing Cache and Data of Media Storage 2.3. Method 3: Reset App Preference 3. Alternative Methods to Fix the Error: 3.1. Method 4: Delete some items from SD Card 3.2. Method 5: Unmount SD Card 3.3.

How to add cropimageactivity to Android app?

android:name=”com.theartofdev.edmodo.cropper.CropImageActivity” Below is the code for the complete AndroidManifest.xml file. Navigate to the app > res > layout > activity_main.xml and add the below code to that file. Below is the code for the activity_main.xml file. Go to the MainActivity.java file and refer to the following code.


1 Answers

To resolve the problem what i have done is to,

just change the code from this

intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(
    Intent.createChooser(intent, "Complete action using"), PICK_FROM_FILE
);

to

intent = new Intent(Intent.ACTION_PICK);
intent.setType("*/*");
intent.putExtra(
    android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri
);
startActivityForResult(
    Intent.createChooser(intent, "Complete action using"), PICK_FROM_FILE
);

Working like charm.

like image 168
Piyush Avatar answered Oct 05 '22 06:10

Piyush