Iām working on a camera application, I want it to be when I click the Capture button, it takes a snapshot and saves it on the SD card so that it can be viewed in the gallery.
However, he cannot save how I want it. At the time when I press the capture button, it takes a picture, but the image is displayed only in the gallery after the phone is completely restarted.
This problem was useless with me for several weeks, I mainly followed the instructions for the android.
Here is my code for the main class that processes images.
private PictureCallback mPicture = new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE); if (pictureFile == null){ Log.d(TAG, "Error creating media file, check storage permissions: "); return; } try { FileOutputStream fos = new FileOutputStream(pictureFile); fos.write(data); fos.close(); } catch (FileNotFoundException e) { // Log.d(TAG, "File not found: " + e.getMessage()); } catch (IOException e) { // Log.d(TAG, "Error accessing file: " + e.getMessage()); } } }; private static File getOutputMediaFile(int type){ // To be safe, you should check that the SDCard is mounted // using Environment.getExternalStorageState() before doing this. File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), "MyCameraApp"); // This location works best if you want the created images to be shared // between applications and persist after your app has been uninstalled. // Create the storage directory if it does not exist if (! mediaStorageDir.exists()){ if (! mediaStorageDir.mkdirs()){ Log.d("MyCameraApp", "failed to create directory"); return null; } } // Create a media file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); File mediaFile; if (type == MEDIA_TYPE_IMAGE){ mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_"+ timeStamp + ".jpg"); } else if(type == MEDIA_TYPE_VIDEO) { mediaFile = new File(mediaStorageDir.getPath() + File.separator + "VID_"+ timeStamp + ".mp4"); } else { return null; } return mediaFile; } public void onClick(View v) { mCamera.takePicture(null, null, mPicture); Context context = getApplicationContext(); CharSequence text = "Click Detected"; int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration); toast.show(); }
My cat log shows the following when I click
Level: E Tag: camera Text: in handlemessage for CAMERA_MSG_RAW_IMAGE
My permission
uses-permission android:name="android.permission.CAMERA" uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
Any help is greatly appreciated. Thanks
source share