How to take a picture to show in a `ImageView` and save the picture?

后端 未结 4 736
执笔经年
执笔经年 2020-12-28 23:16

I need to take a picture with the camera, save the picture, show in ImageView and when I click the Imagevie

4条回答
  •  半阙折子戏
    2020-12-28 23:45

    Since there is no proper solution for this, I will put here what I have put together that is working and correct.

    ImageButton takepic = (ImageButton) returnView.findViewById(R.id.takepic);
    
        takepic.setOnClickListener(new View.OnClickListener() {
                            public void onClick(View v) { Intent intent = new Intent();
                                addPhoto();
                            }
    
                        });
    

    Android Manifest :

       
            
        
    

    Android Manifest again at the top :

        
    

    External res/xml/file_paths.xml file:

    
    
        
    
    

    CreateImageFile Function

    private File createImageFile() throws IOException {
        // Create an image file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
         storageDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File image = File.createTempFile(
                imageFileName,  /* prefix */
                ".jpg",         /* suffix */
                storageDir      /* directory */
        );
    
        // Save a file: path for use with ACTION_VIEW intents
        mCurrentPhotoPath = image.getAbsolutePath();
    
        return image;
    }
    

    AddPhoto Function

    private void addPhoto() {
        // Camera.
        final List cameraIntents = new ArrayList();
        final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        final PackageManager packageManager = getActivity().getPackageManager();
        final List listCam = packageManager.queryIntentActivities(captureIntent, 0);
        for(ResolveInfo res : listCam) {
            final String packageName = res.activityInfo.packageName;
            final Intent intent = new Intent(captureIntent);
            intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
            intent.setPackage(packageName);
            intent.putExtra(MediaStore.MEDIA_IGNORE_FILENAME, ".nomedia");
    
            cameraIntents.add(intent);
        }
    
        // Filesystem.
        final Intent galleryIntent = new Intent();
        galleryIntent.setType("image/*");
        galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
    
        // Chooser of filesystem options.
        final Intent chooserIntent = Intent.createChooser(galleryIntent, "profileimg");
    
        // Add the camera options.
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[]{}));
        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(getContext(),
                    "com.example.android.fileprovider",
                    photoFile);
            chooserIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
        startActivityForResult(chooserIntent, 100);}
    }
    

    On activity callback

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        if (requestCode == 100) {
            try {
    
                Bundle extras = data.getExtras();
                Uri uri = data.getData();
                ImageButton takepic = (ImageButton) returnView.findViewById(R.id.takepic);
                if (extras!=null){
                    Bitmap imageBitmap = (Bitmap) extras.get("data");
                    Log.d(TAG, "onActivityResult: "+mCurrentPhotoPath);
    
    
                    takepic.setImageBitmap(imageBitmap);
                }
    
    
                String wholeID = DocumentsContract.getDocumentId(uri);
    
                // Split at colon, use second item in the array
                String idx = wholeID.split(":")[1];
    
                String[] column = {MediaStore.Images.Media.DATA};
    
                // where id is equal to
                String sel = MediaStore.Images.Media._ID + "=?";
    
                Cursor cursor = getContext().getContentResolver().
                        query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                                column, sel, new String[]{idx}, null);
    
                String filePath = "";
    
                int columnIndex = cursor.getColumnIndex(column[0]);
    
                if (cursor.moveToFirst()) {
                    filePath = cursor.getString(columnIndex);
                }
    
                cursor.close();
    
    
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), uri);
                takepic.setImageBitmap(bitmap);
                Toast.makeText(getContext(), "Uploading In Progress",
                        Toast.LENGTH_LONG);
            }catch(Exception e){
                e.getMessage();
            }
    }}
    

提交回复
热议问题