2012-05-01 56 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; 
     } 

對於視頻文件,它應該是你應該看看如何將它作爲字節數組解碼相同並用多部分發送。