可变类型的视频和图像

时间:2012-05-01 15:49:15

标签: android

正在处理一些申请。但是,我已经完成了两个模块,它们调用手机的原生相机拍摄快照并录制视频。我打算使用手机应用程序将手机拍摄和录制的图像和视频发送到我打算创建的网站。但是,对于文本信息,我可以将信息存储为字符串,图像和视频,我不确定是否应该在提交时将它们留作Uris。以下是我的照片和视频节目。感谢名单 图片代码:

package com.project;

import java.io.File;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MyPicture extends Activity {
    /** Called when the activity is first created. */
    /*constant and variable created so as to work with the taken pictures*/
    private static int TAKE_PICTURE = 1;
    private Uri outputFileUri;
    Uri imageUri;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pic);
        Button pictureButton=(Button) findViewById(R.id.pictureButton);
        pictureButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                File file = new File(Environment.getExternalStorageDirectory(),"test.jpg");
                outputFileUri = Uri.fromFile(file);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
                startActivityForResult(intent, TAKE_PICTURE);

            }
        });
    }
    @Override
    protected void onActivityResult(int requestCode,int resultCode, Intent data){
        if (requestCode == TAKE_PICTURE){
            imageUri = data.getData();
            //do something about the image in the in outputFileUri
            Toast.makeText(MyPicture.this,
                    "Picture successfully taken",
                    Toast.LENGTH_SHORT).show();
                    Intent i = new Intent(MyPicture.this,/*program execution proceeds back to MyPicture, our start page after success of image takin*/
                            Myindex.class);
                    startActivity(i);

        }else{
            Toast.makeText(MyPicture.this,
                    "Picture Unsuccessfully taken",
                    Toast.LENGTH_SHORT).show();
                    Intent i = new Intent(MyPicture.this,/*program execution proceeds back to MyPicture, so we can redo the recording*/
                            MyPicture.class);
                    startActivity(i);
        }

    }
} 

视频代码:

package com.project;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MyVideo extends Activity {
    /*program for the vid button*/
    private static int  RECORD_VIDEO = 1;
    private static int HIGH_VIDEO_QUALITY = 1;
    //private static int MMS_VIDEO_QUALITY = 0;
    Uri recordedVideo;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.vid);
        Button videoButton=(Button) findViewById(R.id.videoButton);
        videoButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                //intent.putExtra(MediaStore.EXTRA_OUTPUT, output);
                intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, HIGH_VIDEO_QUALITY);
                startActivityForResult(intent, RECORD_VIDEO);
            }
        });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if (requestCode == RECORD_VIDEO){
            recordedVideo = data.getData();
            //to do something with the recorded video
            //we shall insert this information in the database
            Toast.makeText(MyVideo.this,
                    "Video successfully recorded",
                    Toast.LENGTH_SHORT).show();
                    Intent i = new Intent(MyVideo.this,/*program execution proceeds back to Myindex, our start page*/
                            Myindex.class);
                    startActivity(i);
        }
        else{
            /*Happens after unsuccessfull recording of video*/
            Toast.makeText(MyVideo.this,
                    "Video Unsuccessfully recorded",
                    Toast.LENGTH_SHORT).show();
                    Intent i = new Intent(MyVideo.this,/*program execution proceeds back to MyVideo, so we can redo the recording*/
                            MyVideo.class);
                    startActivity(i);
        }

    }
}

1 个答案:

答案 0 :(得分:0)

对于图像,我通常做的是将数据解码为Bitmap,然后使用多部分内容类型通过Http Post发送。

您可以使用BitmapFactory.decodeFile将图像文件解码为Bitmap

以下是我使用Apache库发送Bitmap多部分的示例:

public String doHttpMultipart(String url, 
                                  List<NameValuePair> pairs,
                                  Bitmap bitmap,
                                  String fileName) throws IOException, 
                                                ClientProtocolException,
                                                UnsupportedEncodingException {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();        
            bitmap.compress(CompressFormat.PNG, 100, bos);
            byte[] imageData = bos.toByteArray();
            ByteArrayBody byteArrayBody = new ByteArrayBody(imageData, fileName);
            MultipartEntity reqEntity = 
                        new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

            reqEntity.addPart("image", byteArrayBody);

            for(NameValuePair p : pairs) {
                reqEntity.addPart(p.getName(), new StringBody(p.getValue()));
            }

            HttpPost request = new HttpPost(url);
            request.setEntity(reqEntity);

            HttpClient client = new DefaultHttpClient();
            HttpResponse httpResponse = client.execute(request);

            String response = "";
            BufferedReader in = null;

            try {
                response = super.readHttpStream(response, in, httpResponse);    
            } catch(IllegalStateException e) {
                throw new IllegalStateException();
            } catch(IOException e) {
                throw new IOException();
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

            return response;
        }

对于视频文件,它应该是相同的,您应该看到如何将其解码为字节数组并使用multipart发送它。