Android How to - Save Media content








The following code shows how to Save Media content.

Example

Register Media content

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.examples.mediastore"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="4"
        android:targetSdkVersion="19" />

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

Main layout xml file

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <Button
        android:id="@+id/imageButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Images" />
    <Button
        android:id="@+id/videoButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Video" />
    <Button
        android:id="@+id/textButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Text Document" />

</LinearLayout>

Main Activity Java code

import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.provider.MediaStore;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
//  w  w  w  .jav  a 2 s .  c om
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

public class MainActivity extends Activity implements View.OnClickListener {

    private static final int REQUEST_CAPTURE = 100;
    private static final int REQUEST_DOCUMENT = 101;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.save);
        
        Button images = (Button) findViewById(R.id.imageButton);
        images.setOnClickListener(this);
        Button videos = (Button) findViewById(R.id.videoButton);
        videos.setOnClickListener(this);
        Button text = (Button) findViewById(R.id.textButton);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            text.setOnClickListener(this);
        } else {
            text.setVisibility(View.GONE);
        }
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CAPTURE && resultCode == Activity.RESULT_OK) {
            Toast.makeText(this, "All Done!", Toast.LENGTH_SHORT).show();
        }
        if (requestCode == REQUEST_DOCUMENT && resultCode == Activity.RESULT_OK) {
            Uri document = data.getData();
            writeDocument(document);
        }
    }
    
    private void writeDocument(Uri document) {
        try {
            ParcelFileDescriptor pfd = getContentResolver().openFileDescriptor(document, "w");
            FileOutputStream out = new FileOutputStream(pfd.getFileDescriptor());
            StringBuilder sb = new StringBuilder();
            sb.append("Last Written at: ");
            sb.append(DateFormat.getLongDateFormat(this).format(new Date()));

            out.write(sb.toString().getBytes());
            out.flush();
            out.close();
            pfd.close();
        } catch (Exception e) {
            Log.w("Android", e);
        }
    }
    
    @Override
    public void onClick(View v) {
        ContentValues values;
        Intent intent;
        Uri storeLocation;
        final long nowMillis = System.currentTimeMillis();
        
        switch(v.getId()) {
        case R.id.imageButton:
            values = new ContentValues(5);
            values.put(MediaStore.Images.ImageColumns.DATE_TAKEN, nowMillis);
            values.put(MediaStore.Images.ImageColumns.DATE_ADDED, nowMillis / 1000);
            values.put(MediaStore.Images.ImageColumns.DATE_MODIFIED, nowMillis / 1000);
            values.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, "Test Image Sample");
            values.put(MediaStore.Images.ImageColumns.TITLE, "Test Image Sample");
            
            storeLocation = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
            intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, storeLocation);
            startActivityForResult(intent, REQUEST_CAPTURE);
            return;
        case R.id.videoButton:
            values = new ContentValues(7);
            values.put(MediaStore.Video.VideoColumns.DATE_TAKEN, nowMillis);
            values.put(MediaStore.Video.VideoColumns.DATE_ADDED, nowMillis / 1000);
            values.put(MediaStore.Video.VideoColumns.DATE_MODIFIED, nowMillis / 1000);
            values.put(MediaStore.Video.VideoColumns.DISPLAY_NAME, "Test Video Sample");
            values.put(MediaStore.Video.VideoColumns.TITLE, "Test Video Sample");
            values.put(MediaStore.Video.VideoColumns.ARTIST, "Yours Truly");
            values.put(MediaStore.Video.VideoColumns.DESCRIPTION, "Sample Video Clip");
            
            storeLocation = getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
            intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, storeLocation);
            startActivityForResult(intent, REQUEST_CAPTURE);
            return;
        case R.id.textButton:
            intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            
            intent.setType("text/plain");
            intent.putExtra(Intent.EXTRA_TITLE, "Test");
            startActivityForResult(intent, REQUEST_DOCUMENT);
        default:
            return;
        }
    }
}
null