Unable to allow activity for result

I am creating a dynamic button to capture photos from Android. The dynamic button is in another class from the main activity. I got an error Can't resolveon my my codestartActivityForResult here

I would appreciate any help. Thank.

+4
source share
1 answer

Try this way, hope it helps you solve your problem.

Hold that the user class cannot override onActivityResult () only the extended class action onActivityResult (), so you need to override onActivityResult () in your Actitvity and get a callback to your custom class, as shown below

public class MainActivity extends Activity {

    private JsonGuiImageView jsonGuiImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        jsonGuiImageView = new JsonGuiImageView(this);
        setContentView(jsonGuiImageView);
    }

    @Override
    protected void  onActivityResult(int requestCode, int resultCode, Intent data){
        if(requestCode == jsonGuiImageView.CAMERA_REQUEST && resultCode == Activity.RESULT_OK){
            jsonGuiImageView.setPhoto();
        }
    }
}

public class JsonGuiImageView extends LinearLayout {
    private ImageView imageView;
    private ImageButton button;
    private Intent cameraIntent;
    private Bitmap photo;
    private Context context;
    public static int CAMERA_REQUEST = 1777;
    private String imagePath;

    public JsonGuiImageView(Context context){
        super(context);
        this.context = context;
        this.setOrientation(VERTICAL);
        this.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
        this.setGravity(Gravity.CENTER);
        button = new ImageButton(this.context);
        button.setLayoutParams(new ViewGroup.LayoutParams(60, 60));
        button.setImageResource(R.drawable.ic_launcher);
        button.setMaxHeight(60);
        button.setMinimumHeight(60);
        button.setMaxWidth(60);
        button.setMinimumWidth(60);
        button.setOnClickListener(AddImage);
        this.addView(button);
    }

    public JsonGuiImageView(Context context, AttributeSet attributeSet){
        super(context, attributeSet);
    }

    OnClickListener AddImage = new OnClickListener() {
        @Override
        public void onClick(View view) {
            File file = new File(Environment.getExternalStorageDirectory() + File.separator + "image.jpg");
            imagePath = file.getAbsolutePath();
            cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(file));
            if (cameraIntent.resolveActivity(((Activity)context).getPackageManager()) != null) {
                ((Activity)context).startActivityForResult(cameraIntent, CAMERA_REQUEST);
            }
        }
    };

    public void setPhoto(){
        photo = decodeSampledBitmapFromFile(imagePath, 480, 640);
        imageView = new ImageView(getContext());
        imageView.setMaxHeight(60);
        imageView.setMinimumHeight(60);
        imageView.setMaxWidth(60);
        imageView.setMinimumWidth(60);
        imageView.setImageBitmap(photo);
        this.addView(imageView);
    }

    public static Bitmap decodeSampledBitmapFromFile(String path, int reqWidth, int reqHeight)
    {
        Bitmap decode, rotatedBitmap = null;

        //First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(path, options);

        // Calculate inSampleSize, Raw height and width of image
        final int height = options.outHeight;
        final int width = options.outWidth;
        options.inPreferredConfig = Bitmap.Config.RGB_565;
        int inSampleSize = 8;

        if (height > reqHeight)
        {
            inSampleSize = Math.round((float)height / (float)reqHeight);
        }
        int expectedWidth = width / inSampleSize;

        if (expectedWidth > reqWidth)
        {
            //if(Math.round((float)width / (float)reqWidth) > inSampleSize) // If bigger SampSize..
            inSampleSize = Math.round((float)width / (float)reqWidth);
        }

        options.inSampleSize = inSampleSize;

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        options.inPurgeable = true;
        options.inInputShareable = true;
        options.inTempStorage = new byte[16 * 1024];

        try{
            ExifInterface exifInterface = new ExifInterface(path);
            int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

            int rotation = 0;
            switch (orientation){
                case ExifInterface.ORIENTATION_ROTATE_90 :
                    rotation = 90;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_180 :
                    rotation = 180;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_270 :
                    rotation = 270;
                    break;
                default: break;
            }

            Matrix matrix = new Matrix();
            matrix.postRotate(rotation);

            decode = BitmapFactory.decodeFile(path, options);
            rotatedBitmap = Bitmap.createBitmap(decode, 0, 0, decode.getWidth(), decode.getHeight(), matrix, true);
        } catch (IOException e){
            e.printStackTrace();
        }

        return rotatedBitmap;
    }
}
+3
source

All Articles