2012-05-01 60 views
1

我在一些应用程序上工作。然而,我已经完成了两个模块,它们调用手机的本机相机拍摄快照,并且还记录了一段视频。我打算使用手机应用程序将手机拍摄的图像和视频发送到我打算创建的网站。但是,对于文本信息,我可以将信息存储为字符串,图像和视频,我不确定是否应该将它们作为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); 
     } 

    } 
} 

回答

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; 
     } 

对于视频文件,它应该是你应该看看如何将它作为字节数组解码相同并用多部分发送。