首页 文章

startActivityForResult返回数据null

提问于
浏览
0

我尝试将图像从相机发送到我的活动 . 我从适配器调用startActivityForResult,如下所示:

photo.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            dialog.dismiss();
                            mActivity.dispatchTakePictureIntent(part.getId());
                            }
                });

这是Activity上的方法:

public void dispatchTakePictureIntent(String id) {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    // Ensure that there's a camera activity to handle the intent
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        // Create the File where the photo should go
        File photoFile = null;
        try {
            photoFile = createImageFile();
        } catch (IOException ex) {
            // Error occurred while creating the File

        }
        // Continue only if the File was successfully created
        if (photoFile != null) {
            Uri photoURI = FileProvider.getUriForFile(this,
                    "com.example.eltegps011.eltegps.fileprovider",
                    photoFile);
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
            takePictureIntent.putExtra("Id",id);

            startActivityForResult(takePictureIntent, CAM_REQUEST);
        }

    }
}

这是我的onActivityResult();

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == 2) {
            part = (Part) data.getSerializableExtra("Part");
            Log.e(TAG, "onActivityResult: ");

    }if(requestCode == 1313) {
        Bitmap thumbnail = (Bitmap)data.getExtras().get("data");
        String id = data.getStringExtra("Id");
        Log.e(TAG, "onActivityResult: " + id);
    }

但是,Bitmap thumbnail =(Bitmap)data.getExtras() . get(“data”)为null,resultCode始终为-1 . 它似乎意图没有进入活动 . 知道为什么吗?

1 回答

  • 0

    Full Demo working on all versions.

    对于捕获和拾取图像

    注意:Android 6.0在点击后获得运行时权限然后获得 .

    public class MainActivity extends Activity {
    
        private ImageView camera, gallery;
        File photoFile;
        Uri uri;
        private final static int RESULT_LOAD_IMAGE = 1;
        private final static int REQUEST_IMAGE_CAPTURE = 2;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            camera = (ImageView) findViewById(R.id.Img);
            gallery = (ImageView) findViewById(R.id.imageView);
            camera.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dispatchTakePictureIntent();
    
                }
            });
            gallery.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    startActivityForResult(i, RESULT_LOAD_IMAGE);
                }
            });
        }
    
        private void dispatchTakePictureIntent() {
    
            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                photoFile = Environment.getExternalStoragePublicDirectory("/myimage/save.jpg");
                if (photoFile != null) {
                    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                            Uri.fromFile(photoFile));
                    startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
                }
            }
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
                uri = data.getData();
                String selecteadImage = getRealPathFromURI(this, data.getData());
                Toast.makeText(this, "Image path " + selecteadImage, Toast.LENGTH_LONG).show();
    
            } else if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
    
                if (data != null && data.getData() != null) {
                    String selecteadImage = getRealPathFromURI(this, data.getData());
                    Toast.makeText(this, "Image path " + selecteadImage, Toast.LENGTH_LONG).show();
                } else {
                    if (photoFile != null) {
                        String selecteadImage = photoFile.getAbsolutePath();
                        Toast.makeText(this, "Image path " + selecteadImage, Toast.LENGTH_LONG).show();
                    }
                }
            }
        }
    
        public String getRealPathFromURI(Context context, Uri contentUri) {
            Cursor cursor = null;
            try {
                String[] proj = {MediaStore.Images.Media.DATA};
                cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
                int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                cursor.moveToFirst();
                return cursor.getString(column_index);
            } finally {
                if (cursor != null) {
                    cursor.close();
                }
            }
        }
    }
    

    Manifest Permissions:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    

    activity_main:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/image_1">
    
    
        <ImageView
            android:id="@+id/camera"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:src="@mipmap/ic_launcher" />
    
        <ImageView
            android:id="@+id/gallery"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/camera"
            android:layout_centerHorizontal="true"
            android:src="@mipmap/ic_launcher" />
    </RelativeLayout>
    

相关问题