可能重复:
Calling camera from an activity, capturing an image and uploading to a server
我需要构建一个应用程序来启动相机,拍照,将该照片保存到SD卡,然后将此照片上传到.net服务器而不改变它的质量,任何人都有想法?
答案 0 :(得分:12)
您已经编写了解决方案^^要启动相机应用程序,请使用:
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);
然后你需要一个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;
}
}
存储图片后,你必须执行一个Post Request来加载网页中的图片,你需要将文件复制到服务器的脚本,也许是asp.net,而你只需要执行请求。我只有一个带有凭据的https请求代码,使用来自appache的外部库,这可能有点太复杂,但我相信你会在这里找到代码,否则我的解决方案看起来像:
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;
}
}
答案 1 :(得分:1)
拍照使用此代码
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)
{
//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);
}
}
最后将照片上传到服务器尝试使用ksoap webservices
答案 2 :(得分:1)
您可以使用拍摄照片
拍摄照片startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), TAKE_PICTURE);
也请参考http://developer.android.com/reference/android/provider/MediaStore.html
答案 3 :(得分:0)
参考Android示例,有很多相机使用示例和http示例。
http://developer.android.com/reference/android/hardware/Camera.html http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html
试试谷歌,有很多例子。如果您遇到具体问题,请询问。
好运。