2011-12-14 8 views
1

私は公開サーバにasp.netウェブサイトを持っていて、それはフォームを持っています。フォーム上のボタンはカメラを初期化する必要があり、キャプチャが完了したら、イメージファイルをサーバーにアップロードしてデータベースに保存する必要があります。カメラを初期化し、ウェブサイトからAndroidにファイルをアップロードする

QuickPicというWebアプリケーションを使ってIphoneに実装しました。このアプリケーションは、javascriptを使用して呼び出します。以下のリンクには同じもののjavascriptコードがあります。 http://www.resolved-technologies.com/php/cliqcliq-quickpic-upload-for-php/

Androidでも同様のことを探しています。今のところ私が関係して訪れたフォーラムは何でも、それらはすべてJavaベースのWebアプリケーションの開発を指しています。私たちの選択肢ではないPhoneGap。

私には2つの質問があります: Javascript経由で呼び出すことができ、カメラと対話して画像をアップロードできるネイティブAndroidAPIはありますか? または カメラを初期化して画像をアップロードするためにJavascript経由で呼び出すことができるAndroid APPはありますか?

ここおかげで、

ビジェイ

答えて

2

はあなたを助けるかもしれないいくつかのネイティブJavaコードです:

使用は、このカメラを初期化する:ここで

Intent intent2 = new Intent(v.getContext(), CameraView.class); 
startActivityForResult(intent2, 1); 

がCameraViewです:

import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.OutputStream; 

import android.app.Activity; 
import android.content.ContentValues; 
import android.graphics.PixelFormat; 
import android.hardware.Camera; 
import android.hardware.Camera.AutoFocusCallback; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore.Images.Media; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class CameraView extends Activity { 
private static final String TAG = "CameraView"; 

private SurfaceView preview=null; 
private SurfaceHolder previewHolder=null; 
private Camera camera=null; 
private boolean inPreview=false; 
private ImageView takePicture; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.cameraview); 

takePicture = (ImageView)findViewById(R.id.take_picture); 

preview=(SurfaceView)findViewById(R.id.preview); 
previewHolder=preview.getHolder(); 
previewHolder.addCallback(surfaceCallback); 
previewHolder 
    .setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

preview.setOnClickListener(new OnClickListener(){ 

    @Override 
    public void onClick(View arg0) { 
     takePicture.setEnabled(false); 
     camera.autoFocus(myAutoFocusCallback); 

    } 

}); 


takePicture.setOnClickListener(new OnClickListener(){ 

    @Override 
    public void onClick(View arg0) { 

     camera.takePicture(null, null, photoCallback); 
     inPreview=false;  
    } 

}); 


} 

@Override 
public void onResume() { 
super.onResume(); 
try{ 
    if (camera==null) { 
     camera=Camera.open(); 
     camera.setDisplayOrientation(90); 
     Camera.Parameters params = camera.getParameters(); 
     params.set("rotation", 90); 
     camera.setParameters(params); 

    } 
}catch (Exception e){ 
    finish(); 
} 
} 

@Override 
public void onPause() { 
if (inPreview) { 
    camera.stopPreview(); 
} 
if(camera != null) 
    camera.release(); 
camera=null; 
inPreview=false; 

super.onPause(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
new MenuInflater(this).inflate(R.menu.options, menu); 

return(super.onCreateOptionsMenu(menu)); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
if (item.getItemId()==R.id.camera) { 
    if (inPreview) { 
    camera.takePicture(null, null, photoCallback); 
    inPreview=false; 
    } 
} 

return(super.onOptionsItemSelected(item)); 
} 

private Camera.Size getBestPreviewSize(int width, 
    int height, Camera.Parameters parameters) { 
Camera.Size result=null; 

for (Camera.Size size : parameters.getSupportedPreviewSizes()) { 
    if (size.width<=width && size.height<=height) { 
    if (result==null) { 
     result=size; 
    } 
    else { 
     int resultArea=result.width*result.height; 
     int newArea=size.width*size.height; 

     if (newArea>resultArea) { 
     result=size; 
     } 
    } 
    } 
} 

return(result); 
} 

SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback() { 
public void surfaceCreated(SurfaceHolder holder) { 
    try { 
    camera.setPreviewDisplay(previewHolder); 
    } 
    catch (Throwable t) { 
    Log.e("PictureDemo-surfaceCallback", 
     "Exception in setPreviewDisplay()", t); 
    Toast.makeText(CameraView.this, t.getMessage(), 
     Toast.LENGTH_LONG).show(); 
    } 
} 

public void surfaceChanged(SurfaceHolder holder, 
    int format, int width, int height) { 
    Camera.Parameters parameters=camera.getParameters(); 

    parameters.setPictureFormat(PixelFormat.JPEG); 

    camera.setParameters(parameters); 
    camera.startPreview(); 

    inPreview=true; 
} 

public void surfaceDestroyed(SurfaceHolder holder) { 
    // no-op 
} 
}; 

Camera.PictureCallback photoCallback=new Camera.PictureCallback() { 
public void onPictureTaken(byte[] data, Camera camera) { 

     Uri uriTarget = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues()); 
     Constants.currImageURI = uriTarget; 
     OutputStream imageFileOS; 

     try { 

     imageFileOS = getContentResolver().openOutputStream(uriTarget); 
     imageFileOS.write(data); 
     imageFileOS.flush(); 
     imageFileOS.close(); 

     Toast.makeText(CameraView.this, "Image saved: " + uriTarget.toString(), Toast.LENGTH_LONG).show(); 

     } catch (FileNotFoundException e) { 
     e.printStackTrace(); 

     } catch (IOException e) { 
      e.printStackTrace(); 

     } 
     setResult(RESULT_OK); 
     finish(); 

} 
}; 
    AutoFocusCallback myAutoFocusCallback = new AutoFocusCallback(){ 

     @Override 
     public void onAutoFocus(boolean arg0, Camera arg1) { 
     // TODO Auto-generated method stub 
     takePicture.setEnabled(true); 
     }}; 

} 

これは、サーバーに画像を取得するのに役立ちます:

public String uploadUserPhoto(File image) throws FileNotFoundException, IOException { 

    Bitmap resized; 


    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 70, bos); 

    byte[] data = bos.toByteArray(); 

    ByteArrayBody bab = new ByteArrayBody(data, "mobileimage.jpg"); 


    DefaultHttpClient mHttpClient; 
    HttpParams params = new BasicHttpParams(); 
    params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); 
    mHttpClient = new DefaultHttpClient(params); 

    try { 
     HttpPost httppost = new HttpPost("http://com.yourserver"); 

     MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 

     multipartEntity.addPart("userfile", bab); 

     httppost.setEntity(multipartEntity); 

     HttpResponse response = mHttpClient.execute(httppost); 
     String responseBody = EntityUtils.toString(response.getEntity()); 

     Log.d(TAG, "response: " + responseBody); 
     return responseBody; 

    } catch (Exception e) { 
     Log.d(TAG, e.getMessage()); 
    } 
    return ""; 
}