开发者

Build a photo upload application in android [duplicate]

开发者 https://www.devze.com 2023-03-07 03:45 出处:网络
This question already has answers here: 开发者_开发百科 Closed 10 years ago. Possible Duplicate: Calling camera from an activity, capturing an image and uploading to a server
This question already has answers here: 开发者_开发百科 Closed 10 years ago.

Possible Duplicate:

Calling camera from an activity, capturing an image and uploading to a server

I need to build an application that will start the camera, take a photo, save that phto to the sdcard, and then upload this photo to a .net server without altering it's quality, any one got an idea?


you already wrote the solution ^^ To start the camera app use:

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    captured_image = System.currentTimeMillis() + ".jpg";
    File file = new File(Environment.getExternalStorageDirectory(), captured_image); 
    captured_image = file.getAbsolutePath();
    Uri outputFileUri = Uri.fromFile(file); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
    intent.putExtra("return-data", true);
    ((Activity) GlobalVars.main_ctx).startActivityForResult(intent, RES_IMAGE_CAPTURE); 

Then you need a ActivityResulListener Like:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    switch (requestCode) { 
        case RES_IMAGE_CAPTURE: 

            Log.i( "MakeMachine", "resultCode: " + resultCode );
            switch( resultCode )
            {
                case 0:
                    Log.i( "MakeMachine", "User cancelled" );
                    break;
                case -1:
                    //image storead, now load it in the web
                    break;
                }
            break;

    }   
}

After storing the Picture you have to perform a Post Request to load the picture in the web, you need script wich is copying the file to the server, maybe asp.net and than you only have to perform the Request. I only have a code for https Requests with credentials, using a External Libary from appache, this might be a little bit too complicated, but I'm sure you will finde a code here, otherwise my solution looks like:

public static boolean upload_image(String url, List<NameValuePair> nameValuePairs,String encoding) {

    DefaultHttpClient http = new DefaultHttpClient();
        SSLSocketFactory ssl =  (SSLSocketFactory)http.getConnectionManager().getSchemeRegistry().getScheme( "https" ).getSocketFactory(); 
        ssl.setHostnameVerifier( SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER );
        final String username = "username";
        final String password = "password";
        UsernamePasswordCredentials c = new UsernamePasswordCredentials(username,password);
        BasicCredentialsProvider cP = new BasicCredentialsProvider(); 
        cP.setCredentials(AuthScope.ANY, c); 
        http.setCredentialsProvider(cP);
        HttpResponse res;
        try {
            HttpPost httpost = new HttpPost(url);
            MultipartEntity entity = new MultipartEntity(HttpMultipartMode.STRICT); 

            for(int index=0; index < nameValuePairs.size(); index++) { 
                ContentBody cb;
                if(nameValuePairs.get(index).getName().equalsIgnoreCase("File")) { 
                    File file = new File(nameValuePairs.get(index).getValue());
                    FileBody isb = new FileBody(file,"application/*");
                    entity.addPart(nameValuePairs.get(index).getName(), isb);
                } else { 
                    // Normal string data 
                    cb =  new StringBody(nameValuePairs.get(index).getValue(),"", null);
                    entity.addPart(nameValuePairs.get(index).getName(),cb); 
                } 
            } 


            httpost.setEntity(entity);
            res = http.execute(httpost);

            InputStream is = res.getEntity().getContent();
            BufferedInputStream bis = new BufferedInputStream(is);
            ByteArrayBuffer baf = new ByteArrayBuffer(50);
            int current = 0;
            while((current = bis.read()) != -1){
                  baf.append((byte)current);
             }
            res = null;
            httpost = null;
            String ret = new String(baf.toByteArray(),encoding);
            GlobalVars.LastError = ret;
            return  true;
           } 
        catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            return true;
        } 
        catch (IOException e) {
            // TODO Auto-generated catch block
            return true;
        } 

} 


for taking photo use this code

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

for save ur photo

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){

        if (requestCode == TAKE_PICTURE)
        {
            //Uri contentURI = Uri.parse(data.getDataString()); 

            ContentResolver cr = getContentResolver();
            InputStream in = null;
            try 
            {
                in = cr.openInputStream(outputFileUri); 
                Log.i("URI ===> ", outputFileUri.getPath());
            } 
            catch (FileNotFoundException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if(in!=null)
            {

                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inSampleSize=8;
                bit = BitmapFactory.decodeStream(in,null,options);

            }

        }

finally upload photo to server try using ksoap webservices


You can take a photo using the Take photo intent

startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), TAKE_PICTURE);

also refer to http://developer.android.com/reference/android/provider/MediaStore.html


Refer to Android samples, there are plenty of camera use examples and http examples.

http://developer.android.com/reference/android/hardware/Camera.html http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html

Try Google, there are plenty of examples. If you get stuck on a specific please ask.

GoodLuck.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号