在Moto G拍摄照片后,onActivityResult无法正常工作

时间:2014-11-05 08:19:20

标签: android android-camera android-camera-intent

private void captureImage() {

        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
        intent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST);
    }
/*
     * Here we store the file url as it will be null after returning from camera
     * app
     */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        // save file url in bundle as it will be null on scren orientation
        // changes
        outState.putParcelable("file_uri", fileUri);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);

        // get the file url
        fileUri = savedInstanceState.getParcelable("file_uri");
    }

    /*
     * Recording video
     */
    /**
     * Receiving activity result method will be called after closing the camera
     * */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // if the result is capturing Image
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST) 
        {
            if (resultCode == RESULT_OK) 
            {
                // successfully captured the image
                // display it in image view
                this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        previewCapturedImage();
                    }
                });

            }
            else if (resultCode == RESULT_CANCELED) 
            {
                // user cancelled Image capture
                Toast.makeText(getApplicationContext(),"User cancelled image capture", Toast.LENGTH_SHORT).show();

            } 
            else 
            {
                // failed to capture image
                Toast.makeText(getApplicationContext(),"Sorry! Failed to capture image", Toast.LENGTH_SHORT).show();
            }
        } 

    }

此代码适用于Google Nexus 4.4.4,但此相同代码不适用于Moto G 4.4.4。 我也使用了调试器但是在Moto G中没有调用onActivityResult。

2 个答案:

答案 0 :(得分:0)

使用此代码:

ImageView profile=(ImageView)findviewById(R.id.imageview);
Intent i = new Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

            startActivityForResult(i, code);

public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == code) {
                Uri selectedImage = data.getData();
                String[] filePathColumn = { MediaStore.Images.Media.DATA };

                try {
                    bmp = BitmapFactory.decodeStream(getContentResolver()
                            .openInputStream(selectedImage));
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                profile.setImageBitmap(bmp);


            }
        }
    }

答案 1 :(得分:0)

对于在所有设备上工作,您不必将Extra置于意图中,并且需要在OnActivityResult方法中获取图像路径,例如:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if(requestCode==CAMERA_REQUEST) {
         if (resultCode == RESULT_OK) {

          if (data.hasExtra("data")) {
             // retrieve the bitmap from the intent
            bitmap = (Bitmap) data.getExtras().get("data");
            Cursor cursor = getActivity().getContentResolver().query(Media.EXTERNAL_CONTENT_URI,new String[] {
                                    Media.DATA,
                                    Media.DATE_ADDED,
                                    MediaStore.Images.ImageColumns.ORIENTATION },
                                    Media.DATE_ADDED, null, "date_added ASC");
            if (cursor != null && cursor.moveToFirst()) {
                do {
                    Uri uri = Uri.parse(cursor.getString(cursor.getColumnIndex(Media.DATA)));
                    selectedImagePath = uri.toString();
                } while (cursor.moveToNext());
                cursor.close();
            }

            Log.e("path of the image from camera ====> ",selectedImagePath);





    public void callCamera() {

    //access to camara
    Intent cameraIntent = new Intent(
            android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

    startActivityForResult(cameraIntent, CAMERA_REQUEST);


}