这里有新鲜出炉的精品教程,程序狗速度看过来!
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。
这篇文章主要介绍了Android拍照上传功能用法,结合实例形式详细分析了Android拍照上传功能所涉及的相关知识点与功能实现技巧,需要的朋友可以参考下
本文实例讲述了Android实现拍照上传功能的方法。分享给大家供大家参考,具体如下:
1、LoginWindow.java --登录窗口
- package com.hemi.rhet;
- import com.hemi.rhet.R;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.KeyEvent;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.CheckBox;
- import android.widget.EditText;
- public class LoginWindow extends Activity {@Override public void onCreate(Bundle savedInstanceState) {
- System.out.println("enter LoginWindow.onCreate()!");
- super.onCreate(savedInstanceState);
- setContentView(R.layout.login_window);
- mUserName = (EditText) findViewById(R.id.username);
- mUserPasswd = (EditText) findViewById(R.id.userpasswd);
- cbx_cmwap = (CheckBox) findViewById(R.id.cbx_cmwap);
- loginButton = (Button) findViewById(R.id.login_button);
- exitButton = (Button) findViewById(R.id.exit_button);
- loginBtnListener = new View.OnClickListener() {
- public void onClick(View view) {
- LoginWindow.isCmwap = cbx_cmwap.isChecked();
- if (view == loginButton) {
- launchFetion();
- } else if (view == exitButton) {
- finish();
- }
- }
- };
- loginButton.setOnClickListener(loginBtnListener);
- exitButton.setOnClickListener(loginBtnListener);
- }
- private void launchFetion() {
- Intent i = new Intent(this, FuncSelector.class);
- i.putExtra(KEY_LOGIN_NAME, mUserName.getText().toString());
- i.putExtra(KEY_LOGIN_PASSWD, mUserPasswd.getText().toString());
- i.putExtra(KEY_LOGIN_TYPE, cbx_cmwap.isChecked());
- startActivity(i);
- }@Override public boolean onKeyDown(int keyCode, KeyEvent msg) {
- // System.out.println("enter onKeyDown() in LoginWindow!");
- //
- // if (null != loginBtnListener) {
- // View aview = getCurrentFocus();
- // loginBtnListener.onClick(aview);
- // }
- return false;
- }
- private Button loginButton,
- exitButton;
- private EditText mUserName;
- private EditText mUserPasswd;
- private CheckBox cbx_cmwap;
- private OnClickListener loginBtnListener;
- public static final String KEY_LOGIN_NAME = "login_name";
- public static final String KEY_LOGIN_PASSWD = "login_passwd";
- public static final String KEY_LOGIN_TYPE = "login_type";
- public static boolean isCmwap = false;
- }
2. FuncSelector.java -- 功能模块选择窗口
- package com.hemi.rhet;
- import java.util.ArrayList;
- import java.util.HashMap;
- import com.hemi.rhet.R;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.GridView;
- import android.widget.SimpleAdapter;
- import android.widget.AdapterView.OnItemClickListener;
- public class FuncSelector extends Activity {@Override public void onCreate(Bundle savedInstanceState) {
- Log.i("info", "enter LoginWindow.onCreate()!");
- super.onCreate(savedInstanceState);
- setContentView(R.layout.func_selector);
- initFuncGrids();
- }
- private void initFuncGrids() {
- GridView funcSeleView = (GridView) findViewById(R.id.func_selector);
- // 生成动态数组,并且转入数据
- ArrayList < HashMap < String,
- Object >> lstImageItem = new ArrayList < HashMap < String,
- Object >> ();
- HashMap < String,
- Object > map = new HashMap < String,
- Object > ();
- map.put("ItemImage", R.drawable.photo_upload); // 添加图像资源的ID
- map.put("ItemText", getString(R.string.photo_upload)); // 按序号做ItemText
- lstImageItem.add(map);
- map = new HashMap < String,
- Object > ();
- map.put("ItemImage", R.drawable.icon);
- map.put("ItemText", getString(R.string.sys_config));
- lstImageItem.add(map);
- for (int i = 1; i <= 10; i++) {
- map = new HashMap < String,
- Object > ();
- map.put("ItemImage", R.drawable.icon); // 添加图像资源的ID
- map.put("ItemText", "NO." + String.valueOf(i)); // 按序号做ItemText
- lstImageItem.add(map);
- }
- // 生成适配器的ImageItem <====> 动态数组的元素,两者一一对应
- SimpleAdapter saImageItems = new SimpleAdapter(this, // 没什么解释
- lstImageItem, // 数据来源
- R.layout.night_item, // night_item的XML实现
- // 动态数组与ImageItem对应的子项
- new String[] {
- "ItemImage",
- "ItemText"
- },
- // ImageItem的XML文件里面的一个ImageView,两个TextView ID
- new int[] {
- R.id.ItemImage,
- R.id.ItemText
- });
- //null);
- // 添加并且显示
- funcSeleView.setAdapter(saImageItems);
- //saImageItems.notifyDataSetChanged();
- // 添加消息处理
- funcSeleView.setOnItemClickListener(new ItemClickListener());
- }
- public boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
- menu.add(0, EXIT_ID, 0, R.string.back_button);
- return true;
- }
- //@Override
- public boolean onMenuItemSelected(int featureId, MenuItem item) {
- boolean result = true;
- switch (item.getItemId()) {
- case EXIT_ID:
- this.finish();
- break;
- default:
- result = super.onMenuItemSelected(featureId, item);
- break;
- }
- return result;
- }
- // 当AdapterView被单击(触摸屏或者键盘),则返回的Item单击事件
- class ItemClickListener implements OnItemClickListener {
- public void onItemClick(AdapterView < ?>arg0, // The AdapterView where the
- // click happened
- View arg1, // The view within the AdapterView that was clicked
- int arg2, // The position of the view in the adapter
- long arg3 // The row id of the item that was clicked
- ) {
- // 在本例中arg2=arg3
- HashMap < String,
- Object > item = (HashMap < String, Object > ) arg0.getItemAtPosition(arg2);
- String tmpStr = (String) item.get("ItemText");
- //item.put("ItemText", tmpStr + tmpStr.substring(tmpStr.length() - 1));
- // 显示所选Item的ItemText
- // setTitle((String)item.get("ItemText"));
- Log.i("info", (String) item.get("ItemText")); ((SimpleAdapter) arg0.getAdapter()).notifyDataSetChanged();
- Intent i;
- switch (arg2) {
- case 0:
- i = new Intent();
- i.setClass(FuncSelector.this, PhotoUpload.class);
- startActivity(i);
- break;
- case 1:
- i = new Intent();
- i.setClass(FuncSelector.this, ConfigWindow.class);
- startActivity(i);
- break;
- default:
- break;
- }
- }
- }
- private static final int TAKE_PHOTO_ID = Menu.FIRST;
- private static final int UPLOAD_PHOTO_ID = Menu.FIRST + 1;
- private static final int EXIT_ID = Menu.FIRST + 3;
- } //FuncSelector
3. PhotoUpload.java -- 照片上传模块
- package com.hemi.rhet;
- import java.io.BufferedReader;
- import java.io.ByteArrayOutputStream;
- import java.io.DataOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.io.UnsupportedEncodingException;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import org.apache.http.Header;
- import org.apache.http.HttpResponse;
- import org.apache.http.NameValuePair;
- import org.apache.http.client.ClientProtocolException;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.entity.UrlEncodedFormEntity;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.entity.FileEntity;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.message.BasicNameValuePair;
- import com.hemi.rhet.R;
- import android.app.Activity;
- import android.content.Intent;
- import android.graphics.Bitmap;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Environment;
- import android.util.Log;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.GridView;
- import android.widget.ImageView;
- import android.widget.SimpleAdapter;
- import android.widget.Toast;
- import android.widget.AdapterView.OnItemClickListener;
- public class PhotoUpload extends Activity {@Override public void onCreate(Bundle savedInstanceState) {
- Log.i("info", "enter LoginWindow.onCreate()!");
- super.onCreate(savedInstanceState);
- setContentView(R.layout.func_selector);
- }@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (TAKE_PHOTO_ID == requestCode) {
- if (resultCode != RESULT_OK) return;
- Bundle extras = data.getExtras();
- try {
- Bitmap photoCaptured = (Bitmap) extras.get("data");
- ImageView img = new ImageView(this);
- img.setImageBitmap(photoCaptured);
- setContentView(img);
- //store to sd card
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- photoCaptured.compress(Bitmap.CompressFormat.JPEG, 100, baos);
- byte[] photoBytes = baos.toByteArray();
- File aFile = new File(getDatedFName(SD_CARD_TEMP_DIR));
- photoPath = aFile.getAbsolutePath();
- boolean b;
- if (aFile.exists()) b = aFile.delete();
- //f.mkdirs();
- aFile.createNewFile(); //need add permission to manifest
- FileOutputStream fos = new FileOutputStream(aFile);
- fos.write(photoBytes);
- fos.close();
- Log.d("info", "onPictureTaken - wrote bytes: " + photoBytes.length);
- Uri capturedImage = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), aFile.getAbsolutePath(), null, null));
- Log.i("camera", "Selected image: " + capturedImage.toString());
- } catch(FileNotFoundException e) {
- e.printStackTrace();
- } catch(IOException e) {
- e.printStackTrace();
- }
- } else if (UPLOAD_PHOTO_ID == requestCode) {}
- }
- public boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
- menu.add(0, TAKE_PHOTO_ID, 0, R.string.take_photo);
- menu.add(0, UPLOAD_PHOTO_ID, 0, R.string.upload_photo);
- menu.add(0, BACK_ID, 0, R.string.back_button);
- return true;
- }
- //@Override
- public boolean onMenuItemSelected(int featureId, MenuItem item) {
- boolean result = true;
- switch (item.getItemId()) {
- case TAKE_PHOTO_ID:
- Log.i("info", "ready to take photos!");
- Intent i = new Intent("android.media.action.IMAGE_CAPTURE");
- startActivityForResult(i, TAKE_PHOTO_ID);
- result = true;
- break;
- case UPLOAD_PHOTO_ID:
- uploadFile2Svr();
- break;
- case BACK_ID:
- this.finish();
- break;
- default:
- result = super.onMenuItemSelected(featureId, item);
- break;
- }
- return result;
- }
- public void uploadFile2Svr() {
- HttpClient httpclient = new DefaultHttpClient();
- String urlStr = new StringBuffer().append(HTTP_PROTOCOL).append(
- /*SERVER_IP*/
- ConfigWindow.getServerIp()).append(':').append(
- /*SERVER_PORT*/
- ConfigWindow.getServerPort()).append(FILE_UPLOADER_URL).toString();
- HttpPost httppost = new HttpPost(urlStr);
- String uploadMsg = "上传 照片失败!";
- try {
- List < NameValuePair > nameValuePairs = new ArrayList < NameValuePair > ();
- // Your DATA
- nameValuePairs.add(new BasicNameValuePair("filename", ("IMAGE.jpg")));
- // nameValuePairs.add(new BasicNameValuePair("orderno", "1"));
- // nameValuePairs.add(new BasicNameValuePair("userid", "123"));
- // nameValuePairs.add(new BasicNameValuePair("attach_type", "1"));
- // httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
- File aFile = new File(photoPath);
- Log.i("info -- photoPath: ", photoPath);
- FileEntity fileEty = new FileEntity(aFile, "binary/octet-stream");
- httppost.setEntity(fileEty);
- httppost.addHeader("filename",
- /*("IMAGE.jpg")*/
- aFile.getName());
- HttpResponse response;
- response = httpclient.execute(httppost);
- //Log.i("info -- response: ", response.getStatusLine().getReasonPhrase());
- Header[] headers = response.getAllHeaders();
- headers = response.getHeaders("resultcode");
- if (headers[0].getValue().equals("0")) {
- uploadMsg = "上传照片成功!";
- }
- } catch(UnsupportedEncodingException e) {
- //e.printStackTrace();
- uploadMsg += e.toString();
- Log.e("exception", e.toString());
- } catch(ClientProtocolException e) {
- //e.printStackTrace();
- uploadMsg += e.toString();
- Log.e("exception", e.toString());
- } catch(IOException e) {
- //e.printStackTrace();
- uploadMsg += e.toString();
- Log.e("exception", e.toString());
- } finally {
- Toast.makeText(PhotoUpload.this, uploadMsg, Toast.LENGTH_LONG).show();
- httpclient.getConnectionManager().shutdown();
- }
- }
- public void uploadFile2Svr2() {
- BufferedReader in =null;
- HttpClient httpclient = new DefaultHttpClient();
- String urlStr = new StringBuffer().append(HTTP_PROTOCOL).append(ConfigWindow.getServerIp()).append(ConfigWindow.getServerPort()).append(FILE_UPLOADER_URL).toString();
- URL url = null;
- try {
- url = new URL(urlStr);
- } catch(MalformedURLException e1) {
- e1.printStackTrace();
- }
- HttpURLConnection conn = null;
- DataOutputStream dos = null;
- String lineEnd = "/r/n";
- String twoHyphens = "--";
- String boundary = "*****";
- int maxBufferSize = 16 * 1024;
- try {
- // List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
- // // Your DATA
- // nameValuePairs.add(new BasicNameValuePair("filename", getDatedFName("IMAGE.jpg")) );
- // nameValuePairs.add(new BasicNameValuePair("orderno", "1"));
- // nameValuePairs.add(new BasicNameValuePair("userid", "123"));
- // nameValuePairs.add(new BasicNameValuePair("attach_type", "1"));
- //httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
- // Open a HTTP connection to the URL
- conn = (HttpURLConnection) url.openConnection();
- conn.setConnectTimeout(120000);
- // Allow Inputs
- conn.setDoInput(true);
- // Allow Outputs
- conn.setDoOutput(true);
- // Don't use a cached copy.
- conn.setUseCaches(false);
- // Use a post method.
- conn.setRequestMethod("POST");
- conn.setRequestProperty("Connection", "Keep-Alive");
- conn.setRequestProperty("Content-Type",
- //"multipart/form-data;boundary=" + boundary);
- "application/x-www-form-urlencoded");
- conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB6");
- //conn.setRequestProperty("accept-language", "zh-cn,zh;q=0.5");
- //conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+ boundary);
- conn.connect();
- //OutputStream connOs = conn.getOutputStream();
- dos = new DataOutputStream(conn.getOutputStream());
- dos.writeBytes(twoHyphens + boundary + lineEnd);
- dos.writeBytes("Content-Disposition: form-data; name=/"uploadedfile / ";filename=/""
- + "exsistingFileName " + " / "" + lineEnd);
- //dos.writeBytes(lineEnd);
- Log.i("info", "Headers are written");
- // upload file to webserver via http
- FileInputStream fileInputStream = new FileInputStream(photoPath);
- // create a buffer of maximum size
- int bytesAvailable = fileInputStream.available();
- int bufferSize = Math.min(bytesAvailable, maxBufferSize);
- byte[] buffer = new byte[bufferSize];
- // read file and write it into form...
- int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
- while (bytesRead > 0) {
- dos.write(buffer, 0, bufferSize);
- bytesAvailable = fileInputStream.available();
- bufferSize = Math.min(bytesAvailable, maxBufferSize);
- bytesRead = fileInputStream.read(buffer, 0, bufferSize);
- }
- // send multipart form data necesssary after file data...
- dos.writeBytes(lineEnd);
- dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
- // close streams
- Log.e("info", "File is written");
- fileInputStream.close();
- dos.flush();
- dos.close();
- dos = null;
- // response
- // HttpResponse response;
- // response = httpclient.execute(httppost);
- // response = httpclient.execute(conn.get);
- in =new BufferedReader(new InputStreamReader(conn.getInputStream()));
- StringBuffer sb = new StringBuffer("");
- String line = "";
- String NL = System.getProperty("line.separator");
- while ((line = in.readLine()) != null) {
- sb.append(line + NL);
- } in .close();
- String result = sb.toString();
- Log.i("info", result);
- } catch(ClientProtocolException e) {
- e.printStackTrace();
- } catch(IOException e) {
- e.printStackTrace();
- } finally {
- if ( in !=null) {
- try { in .close();
- } catch(IOException ioe) {
- Log.e("error", ioe.toString());
- }
- }
- }
- }
- public static String getDatedFName(String fname) {
- StringBuffer result = new StringBuffer();
- SimpleDateFormat df = new SimpleDateFormat("yyMMddHHmmss");
- String dateSfx = "_" + df.format(new Date());
- int idx = fname.lastIndexOf('.');
- if (idx != -1) {
- result.append(fname.substring(0, idx));
- result.append(dateSfx);
- result.append(fname.substring(idx));
- } else {
- result.append(fname);
- result.append(dateSfx);
- }
- return result.toString();
- }
- //=============================================
- //private Bitmap photoCaptured;
- private String photoPath = "/sdcard/IMAGE_100225083437.jpg"; //"/sdcard/1.txt";
- private static final int TAKE_PHOTO_ID = Menu.FIRST;
- private static final int UPLOAD_PHOTO_ID = Menu.FIRST + 1;
- private static final int BACK_ID = Menu.FIRST + 3;
- private static final String HTTP_PROTOCOL = "http://";
- private static final String FILE_UPLOADER_URL = "/fileuploader/system/fileUpload";
- private String SD_CARD_TEMP_DIR = Environment.getExternalStorageDirectory() + File.separator + "IMG.jpg";
- }
4. ConfigWindow.java--系统配置窗口
- package com.hemi.rhet;
- import com.hemi.rhet.R;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.KeyEvent;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.CheckBox;
- import android.widget.EditText;
- public class ConfigWindow extends Activity {@Override public void onCreate(Bundle savedInstanceState) {
- System.out.println("enter ConfigWindow.onCreate()!");
- super.onCreate(savedInstanceState);
- setContentView(R.layout.config_window);
- mServerIP = (EditText) findViewById(R.id.serverip);
- mServerPort = (EditText) findViewById(R.id.serverport);
- //hemerr
- mServerIP.setText(serverIp);
- mServerPort.setText(serverPort);
- okButton = (Button) findViewById(R.id.ok_button);
- backButton = (Button) findViewById(R.id.back_button);
- loginBtnListener = new View.OnClickListener() {
- public void onClick(View view) {
- if (view == okButton) {
- serverIp = mServerIP.getText().toString();
- serverPort = mServerPort.getText().toString();
- Log.i("info", "IP is: " + serverIp + "/tPort is: " + serverPort);
- finish();
- } else if (view == backButton) {
- finish();
- }
- }
- };
- okButton.setOnClickListener(loginBtnListener);
- backButton.setOnClickListener(loginBtnListener);
- }
- private void launchFetion() {
- Intent i = new Intent(this, FuncSelector.class);
- i.putExtra(KEY_LOGIN_NAME, mServerIP.getText().toString());
- i.putExtra(KEY_LOGIN_PASSWD, mServerPort.getText().toString());
- startActivity(i);
- }@Override public boolean onKeyDown(int keyCode, KeyEvent msg) {
- // System.out.println("enter onKeyDown() in LoginWindow!");
- //
- // if (null != loginBtnListener) {
- // View aview = getCurrentFocus();
- // loginBtnListener.onClick(aview);
- // }
- return false;
- }
- public static String getServerIp() {
- return serverIp;
- }
- public static String getServerPort() {
- return serverPort;
- }
- private Button okButton,
- backButton;
- private EditText mServerIP;
- private EditText mServerPort;
- private OnClickListener loginBtnListener;
- public static final String KEY_LOGIN_NAME = "login_name";
- public static final String KEY_LOGIN_PASSWD = "login_passwd";
- public static final String KEY_LOGIN_TYPE = "login_type";
- public static String serverIp = "192.168.0.98"; //;
- public static String serverPort = "8081";
- }
还需要增加bg_logo.jpg、icon.png、photo_upload.png等几个图片。
Android拍照上传程序的xml配置文件
1. login_window.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical" android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="@drawable/bg_logo"
- >
- <TextView android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:text="@string/user_name"
- />
- <EditText
- android:id="@+id/username"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:scrollHorizontally="true"
- android:autoText="false"
- android:text="user"
- android:capitalize="none"
- android:gravity="fill_horizontal"
- android:textAppearance="?android:attr/textAppearanceMedium"
- />
- <TextView android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:text="@string/user_passwd" />
- <EditText android:id="@+id/userpasswd"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:scrollHorizontally="true"
- android:autoText="false"
- android:text="user"
- android:capitalize="none"
- android:gravity="fill_horizontal"
- android:password="true"
- android:textAppearance="?android:attr/textAppearanceMedium" />
- <CheckBox android:id="@+id/cbx_cmwap"
- android:text="CMWAP"
- android:checked="false"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <RelativeLayout android:orientation="horizontal"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- <Button android:id="@+id/login_button"
- android:text="LOGIN"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:layout_alignParentRight="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <Button android:id="@+id/exit_button"
- android:text="EXIT"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:layout_toLeftOf="@id/login_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </RelativeLayout>
- </LinearLayout>
2. func_selector.xml
- <?xml version="1.0" encoding="utf-8"?>
- <GridView xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/func_selector"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:numColumns="auto_fit"
- android:verticalSpacing="10dp"
- android:horizontalSpacing="10dp"
- android:columnWidth="90dp"
- android:stretchMode="columnWidth"
- android:gravity="center"
- android:background="@drawable/bg_logo"
- />
3. night_item.xml
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="wrap_content"
- android:paddingBottom="4dip" android:layout_width="fill_parent">
- <ImageView
- android:layout_height="wrap_content"
- android:id="@+id/ItemImage"
- android:layout_width="wrap_content"
- android:layout_centerHorizontal="true">
- </ImageView>
- <TextView
- android:layout_width="wrap_content"
- android:layout_below="@+id/ItemImage"
- android:layout_height="wrap_content"
- android:text="TextView01"
- android:layout_centerHorizontal="true"
- android:id="@+id/ItemText">
- </TextView>
- </RelativeLayout>
4. config_window.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical" android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:text="@string/server_ip"
- />
- <EditText
- android:id="@+id/serverip"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:scrollHorizontally="true"
- android:autoText="false"
- android:capitalize="none"
- android:gravity="fill_horizontal"
- android:textAppearance="?android:attr/textAppearanceMedium"
- />
- <TextView android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:text="@string/server_port" />
- <EditText android:id="@+id/serverport"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:scrollHorizontally="true"
- android:autoText="false"
- android:capitalize="none"
- android:gravity="fill_horizontal"
- android:textAppearance="?android:attr/textAppearanceMedium" />
- <RelativeLayout android:orientation="horizontal"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- <Button android:id="@+id/ok_button"
- android:text="@string/ok_button"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:layout_alignParentRight="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <Button android:id="@+id/back_button"
- android:text="@string/back_button"
- android:layout_marginLeft="20dip"
- android:layout_marginRight="20dip"
- android:layout_toLeftOf="@id/ok_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </RelativeLayout>
- </LinearLayout>
5. AndroidManifest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.hemi.rhet" android:versionCode="1" android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:label="@string/app_name" android:name="LoginWindow">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity android:name="FuncSelector"></activity>
- <activity android:name="PhotoUpload"></activity>
- <activity android:name="ConfigWindow"></activity>
- </application>
- <uses-sdk android:minSdkVersion="5"/>
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
- </manifest>
Android拍照上传程序的Servlet程序样例
UploadFileServlet.java:
- package com.hemi.rhet.servlet;
- import java.io.*;
- import java.net.InetAddress;
- import java.net.UnknownHostException;
- import java.sql.SQLException;
- import java.text.SimpleDateFormat;
- import java.util.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- //import org.apache.commons.fileupload.*;
- //import org.apache.commons.fileupload.disk.DiskFileItemFactory;
- //import org.apache.commons.fileupload.servlet.ServletFileUpload;
- //import org.apache.commons.lang.time.DateUtils;
- import org.apache.log4j.Logger;
- //import org.apache.struts2.ServletActionContext;
- public class UploadFileServlet extends HttpServlet
- {
- private static Logger log = Logger.getLogger(UploadFileServlet.class);
- private static final String OBLIQUE_LINE = "/";
- private static final String OPPOSITE_OBLIQUE_LINE = "////";
- private static final String WEBPOSITION = "webapps";
- private static final String SBPATH = "UploadedFiles/";
- File outdir = null;
- File outfile = null;
- FileOutputStream fos = null;
- BufferedInputStream bis = null;
- byte[] bs = new byte[1024];
- String uploadFName = null;
- String orderNo = null;
- String userId = null;
- String attachType = "2";
- public void init() throws ServletException
- {
- // if (log.isDebugEnabled())
- // {
- // log.debug("进入init()方法!!");
- // }
- }
- public void doGet(HttpServletRequest request , HttpServletResponse response) throws IOException, ServletException
- {
- doPost(request, response);
- }
- public void doPost(HttpServletRequest request , HttpServletResponse response) throws IOException, ServletException
- {
- String root = this.getServletContext().getRealPath("/");
- root = root.replaceAll("////", "/");
- try
- {
- StringBuffer destFName = new StringBuffer();
- destFName.append(getRealDir(root)).append(SBPATH);
- outdir = new File(destFName.toString());
- request.setCharacterEncoding("UTF-8");
- uploadFName = request.getParameter("filename"); //name of uploaded file
- uploadFName = request.getHeader("filename");
- if (isEmpty(uploadFName)) uploadFName = "filename.jpg";
- //orderNo = request.getParameter("orderno"); //id of the order or work sheet
- //userId = request.getParameter("userid"); //id of the user who upload the file
- //attachType = request.getParameter("attach_type"); //type of attachment, refer to file.FileBean's definition
- String desc = request.getParameter("desc"); //description of uploaded file
- if (desc==null) desc = "";
- if (true)
- {
- destFName.append(getDatedFName(uploadFName));
- outfile = new File(destFName.toString());
- bis = new BufferedInputStream(request.getInputStream());
- uploadFile();
- //response.getWriter().write("0"); //success
- response.setHeader("resultcode", "0");
- }
- else if (desc.length() > 400/2) {
- //response.getWriter().write("3"); //illegal description
- response.setHeader("resultcode", "3");
- }
- else
- {
- if (log.isDebugEnabled())
- {
- log.debug("调用格式错误!");
- }
- response.sendError(100, "参数错误!");
- //response.getWriter().write("1");
- response.setHeader("resultcode", "1"); //parameter error
- //return;
- }
- } catch (SQLException e) {
- if (log.isDebugEnabled()) {
- log.debug(e);
- }
- //response.getWriter().write("6"); //failure of insert to database
- response.setHeader("resultcode", "6");
- } catch (Exception e) {
- if (log.isDebugEnabled()) {
- log.debug(e);
- }
- //response.getWriter().write("7"); //failure
- response.setHeader("resultcode", "7");
- } finally {
- if (null != bis)
- bis.close();
- if (null != fos)
- fos.close();
- }
- }
- private void uploadFile() throws IOException
- {
- if (log.isDebugEnabled())
- {
- log.debug("outdir:" + outdir.getPath());
- log.debug("outfile:" + outfile.getPath());
- }
- if (!outdir.exists())
- outdir.mkdir();
- if (!outfile.exists())
- outfile.createNewFile();
- fos = new FileOutputStream(outfile);
- int i;
- while ((i = bis.read(bs)) != -1)
- {
- fos.write(bs, 0, i);
- }
- }
- public static String getDatedFName(String fname) {
- StringBuffer result = new StringBuffer();
- SimpleDateFormat df = new SimpleDateFormat("yyMMddHHmmss");
- String dateSfx = "_" + df.format(new Date());
- int idx = fname.lastIndexOf('.');
- if (idx != -1) {
- result.append(fname.substring(0, idx));
- result.append(dateSfx);
- result.append(fname.substring(idx));
- } else {
- result.append(fname);
- result.append(dateSfx);
- }
- return result.toString();
- }
- public static String getUrlFName(String fname, HttpServletRequest request) {
- String result = "";
- if (isEmpty(fname)) return result;
- try {
- if (fname.startsWith("http://")) {
- result = fname;
- } else {
- //HttpServletRequest request = ServletActionContext.getServletContext().getRgetRequest();
- //UserAndOrganAndRole user = (UserAndOrganAndRole)request.getSession().getAttribute("user");
- String ip = request.getServerName();
- int port = request.getServerPort();
- result = fname.substring(fname.indexOf(UploadFileServlet.SBPATH));
- StringBuffer tmpBuff = new StringBuffer();
- tmpBuff.append("http://").append(ip).append(":").append(port).append(OBLIQUE_LINE).append(result);
- //Sample: http://localhost:8083/UploadedFiles/IMAGE_067_100222102521.jpg
- result = tmpBuff.toString();
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- System.out.println("result is: "+result);
- return result;
- }
- public static boolean isEmpty(String str) {
- return ((str == null) || (str.length() == 0));
- }
- /**
- * Method getRealDir search webapps position
- *
- * @param despath
- *
- * @return
- *
- */
- private String getRealDir(String newFileNameRoot) throws Exception {
- if (newFileNameRoot == null)
- throw new Exception("get real dir failed !");
- int dp = newFileNameRoot
- .lastIndexOf(OBLIQUE_LINE);
- if (dp == -1)
- throw new Exception("invalid path !");
- int dpbefore = newFileNameRoot.lastIndexOf(
- OBLIQUE_LINE, dp - 1);
- if (dpbefore == -1)
- throw new Exception("invalid path !");
- String needSubStr = newFileNameRoot.substring(dpbefore + 1, dp);
- String nextStr = newFileNameRoot.substring(0, dpbefore + 1);
- if (!needSubStr.trim().equals(WEBPOSITION)) {
- return getRealDir(nextStr);
- } else
- return newFileNameRoot;
- }
- public static void main(String[] args)
- {
- }
- }
web.xml:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.4"
- xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- <servlet>
- <servlet-name>Upload</servlet-name>
- <servlet-class>com.hemi.rhet.servlet.UploadFileServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>Upload</servlet-name>
- <url-pattern>/system/fileUpload</url-pattern>
- </servlet-mapping>
- </web-app>
希望本文所述对大家Android程序设计有所帮助。
来源: http://www.phperz.com/article/17/0917/348339.html