600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Android实现拍照选择相册图片上传图片(多图片上传)功能

Android实现拍照选择相册图片上传图片(多图片上传)功能

时间:2023-10-23 17:02:04

相关推荐

Android实现拍照选择相册图片上传图片(多图片上传)功能

安卓多图片上传代码

直接上代码

1.主程序入口XML文件

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.zanelove.photoapp" ><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.CALL_PHONE" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.INTERNET" /><applicationandroid:name="com.zanelove.photoapp.MyPhotoApp_Data_Application"android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name" ><activityandroid:name="com.zanelove.photoapp.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".UploadImage_Activity"/></application></manifest>

2.主程序入口代码(MainActivity)

package com.zanelove.photoapp;import android.Manifest;import android.app.Activity;import android.content.Intent;import android.content.pm.PackageManager;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import .Uri;import android.os.AsyncTask;import android.os.Bundle;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.view.View;import android.widget.*;import com.zanelove.photoapp.utils.FileUtil;import com.zanelove.photoapp.utils.File_Tool;import com.zanelove.photoapp.utils.HttpUtil;import com.zanelove.photoapp.utils.SelectPhotoUtil;import com.zanelove.photoapp.view.Pop_Viewpager_Item_Pz;import org.apache.http.NameValuePair;import org.apache.http.message.BasicNameValuePair;import java.io.*;import .ConnectException;import java.util.ArrayList;public class MainActivity extends Activity implements View.OnClickListener {private int is_img = 0;private String oncline_image_tag;private Pop_Viewpager_Item_Pz isn;private LinearLayout viewpager_item_zp_ll;private Toast toast;private ArrayList<String> lists = new ArrayList<String>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);File_Tool.createDIRFrom("");File_Tool.createDIRFrom("photo");File_Tool.createDIRFrom("photo/image");toast = Toast.makeText(this,"",Toast.LENGTH_SHORT);init();}private void init() {initPermission();viewpager_item_zp_ll = (LinearLayout) this.findViewById(R.id.viewpager_item_zp_ll);ImageView viewpager_item_xj = (ImageView) this.findViewById(R.id.viewpager_item_xj);viewpager_item_xj.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {if (viewpager_item_zp_ll.getVisibility() == View.VISIBLE) {viewpager_item_zp_ll.setVisibility(View.GONE);} else {viewpager_item_zp_ll.setVisibility(View.VISIBLE);}}});ImageView pz1 = (ImageView) this.findViewById(R.id.viewpager_item_zp_1);pz1.setTag("pz1");pz1.setOnClickListener(this);ImageView pz2 = (ImageView) this.findViewById(R.id.viewpager_item_zp_2);pz2.setTag("pz2");pz2.setOnClickListener(this);ImageView pz3 = (ImageView) this.findViewById(R.id.viewpager_item_zp_3);pz3.setTag("pz3");pz3.setOnClickListener(this);ImageView pz4 = (ImageView) this.findViewById(R.id.viewpager_item_zp_4);pz4.setTag("pz4");pz4.setOnClickListener(this);TextView next_tv = (TextView) this.findViewById(R.id.viewpager_item_next);next_tv.setText("提交");next_tv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new Put_UserAnser_Task().execute();}});isn = new Pop_Viewpager_Item_Pz(this);}private static final int CAMERA_WITH_DATA = 1001;private static final int PHOTO_PICKED_WITH_DATA = 1002;protected void onActivityResult(int requestCode, int resultCode, Intent data) {if (resultCode != RESULT_OK)return;switch (requestCode) {case PHOTO_PICKED_WITH_DATA: // 从本地选择图片Uri selectedImageUri = data.getData();if (selectedImageUri != null) {this.setImageViewByTask(FileUtil.getPath(this, data.getData()));}break;case CAMERA_WITH_DATA: // 拍照SelectPhotoUtil.doPhoto(this);break;}super.onActivityResult(requestCode, resultCode, data);}/*** 根据图片的绝对地址. 给指定Tag标签的图片赋值.** @param img_path*/public void setImageViewByTask(String img_path) {ImageView iv = (ImageView) viewpager_item_zp_ll.findViewWithTag(oncline_image_tag);String ys_path = ys_img(img_path);FileInputStream fis = null;try {fis = new FileInputStream(ys_path);} catch (FileNotFoundException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}Bitmap bm = BitmapFactory.decodeStream(fis);iv.setImageBitmap(bm);/*** 设置下一个增加图片的按钮.*/int i = Integer.parseInt(oncline_image_tag.substring(oncline_image_tag.length() - 1, oncline_image_tag.length()));String tags = oncline_image_tag.substring(0, oncline_image_tag.length() - 1);ImageView next_iv = (ImageView) viewpager_item_zp_ll.findViewWithTag(tags + (i + 1));if (i != 4) {if (i == 3) {next_iv = (ImageView) viewpager_item_zp_ll.findViewWithTag(tags + "4");} else {next_iv = (ImageView) viewpager_item_zp_ll.findViewWithTag(tags + (i + 1));}is_img++;next_iv.setVisibility(View.VISIBLE);}lists.add(img_path);}/*** 压缩图片.*/private String ys_img(String img_path) {String[] path_arr = img_path.split("/");String[] name_arr = path_arr[path_arr.length - 1].split("\\.");String path = File_Tool.SDPATH + "image/" + name_arr[0] + ".png";BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;// 获取这个图片的宽和高Bitmap bitmap = BitmapFactory.decodeFile(img_path, options); // 此时返回bm为空options.inJustDecodeBounds = false;// 计算缩放比int be = (int) (options.outHeight / 60);if (be <= 0)be = 1;options.inSampleSize = be;// 重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false哦bitmap = BitmapFactory.decodeFile(img_path, options);int w = bitmap.getWidth();int h = bitmap.getHeight();ImageView iv = new ImageView(this);iv.setImageBitmap(bitmap);//bitmap = compressImage(Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), false));// 这样我们就可以读取较大的图片而不会内存溢出了。如果你想把压缩后的图片保存在Sdcard上的话就很简单了:File file = new File(path);try {FileOutputStream out = new FileOutputStream(file);if (press(pressFormat.PNG, 50, out)) {out.flush();out.close();}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return path;}/*** 提交用户文字答案接口数据.** @author wanglei*/class Put_UserAnser_Task extends AsyncTask<String, Integer, String> {ArrayList<String> id_list = new ArrayList<String>();@Overrideprotected void onPreExecute() {super.onPreExecute();}@Overrideprotected String doInBackground(String... arg0) {MyPhotoApp_Data_Application myphoto = (MyPhotoApp_Data_Application) getApplication();//TODOString url = myphoto.getUrl_host() + "port&a=userPaperAnswer" + "&sid=" + myphoto.getSessionid(), resurt = "";ArrayList<NameValuePair> val_list = new ArrayList<NameValuePair>();try {val_list.add(new BasicNameValuePair("is_img", is_img > 0 ? "1" : "0")); // $is_img=1有照片,resurt = HttpUtil.getData(MainActivity.this, url, val_list, HttpUtil.METHOD_POST);} catch (ConnectException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return resurt;}@Overrideprotected void onPostExecute(String result) {super.onPostExecute(result);if ("1".equals(result)) {if (is_img > 0) {int img_sum = 0;Intent intent = new Intent(MainActivity.this, UploadImage_Activity.class);for (int i=0;i<4;i++) {img_sum++;id_list.add(""+(i+1));}intent.putExtra("img_sum", img_sum);intent.putStringArrayListExtra("id_list", id_list);intent.putStringArrayListExtra("lists", lists);MainActivity.this.startActivityForResult(intent, 101);MainActivity.this.finish();} else {toast.setText("提交成功");toast.show();}} else {toast.setText("提交失败");toast.show();}}}@Overridepublic void onClick(View v) {oncline_image_tag = v.getTag().toString();isn.show();}private void initPermission() {String permissions[] = {Manifest.permission.RECORD_AUDIO,Manifest.permission.ACCESS_NETWORK_STATE,Manifest.permission.INTERNET,Manifest.permission.READ_PHONE_STATE,Manifest.permission.WRITE_EXTERNAL_STORAGE};ArrayList<String> toApplyList = new ArrayList<String>();for (String perm :permissions){if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {toApplyList.add(perm);//进入到这里代表没有权限.}}String tmpList[] = new String[toApplyList.size()];if (!toApplyList.isEmpty()){ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123);}}}

3.主程序页面(activity_main.xml)XML文件

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:scrollbars="vertical"android:background="@color/color_white"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="@dimen/size_50dp" ><TextViewandroid:id="@+id/viewpager_item_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="@dimen/size_14dp"android:padding="@dimen/size_14dp"android:textColor="@color/color_000"android:textSize="@dimen/size_14dp" /><RelativeLayoutandroid:id="@+id/viewpager_item_viewed"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/viewpager_item_title"android:layout_marginLeft="@dimen/size_14dp"android:layout_marginRight="@dimen/size_14dp"android:background="@drawable/bg_ed_shape" ><EditTextandroid:id="@+id/viewpager_item_edittext"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@null"android:gravity="top"android:hint="@string/viewpager_edittext_hint"android:inputType="textMultiLine"android:maxLines="50"android:minHeight="@dimen/size_150dp"android:padding="@dimen/size_14dp"android:textColor="@color/color_000"android:textColorHint="@color/color_c"android:textSize="@dimen/size_14dp" /><LinearLayoutandroid:id="@+id/viewpager_item_zp_ll"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_above="@+id/line"android:orientation="horizontal"android:padding="@dimen/size_10dp"android:visibility="gone" ><ImageViewandroid:id="@+id/viewpager_item_zp_1"android:layout_width="@dimen/size_40dp"android:layout_height="@dimen/size_40dp"android:background="@drawable/xk" /><ImageViewandroid:id="@+id/viewpager_item_zp_2"android:layout_width="@dimen/size_40dp"android:layout_height="@dimen/size_40dp"android:layout_marginLeft="@dimen/size_10dp"android:background="@drawable/xk"android:visibility="gone" /><ImageViewandroid:id="@+id/viewpager_item_zp_3"android:layout_width="@dimen/size_40dp"android:layout_height="@dimen/size_40dp"android:layout_marginLeft="@dimen/size_10dp"android:background="@drawable/xk"android:visibility="gone" /><ImageViewandroid:id="@+id/viewpager_item_zp_4"android:layout_width="@dimen/size_40dp"android:layout_height="@dimen/size_40dp"android:layout_marginLeft="@dimen/size_10dp"android:background="@drawable/xk"android:visibility="gone" /></LinearLayout><ImageViewandroid:id="@+id/line"android:layout_width="match_parent"android:layout_height="1dp"android:layout_below="@+id/viewpager_item_edittext"android:background="@color/color_c9" /><RelativeLayoutandroid:id="@+id/viewpager_item_viewxj"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/viewpager_item_edittext"android:layout_margin="1dp"android:background="@color/color_bg_hui" ><ImageViewandroid:id="@+id/viewpager_item_xj"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="@dimen/size_13dp"android:src="@drawable/xj" /></RelativeLayout><ImageViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/viewpager_item_viewxj" /></RelativeLayout><TextViewandroid:id="@+id/viewpager_item_next"style="@style/bt_style_bgtowhite"android:layout_below="@+id/viewpager_item_viewed"android:layout_marginTop="@dimen/size_27dp" /></RelativeLayout></ScrollView>

4.上传图片代码(UploadImage_Activity)

package com.zanelove.photoapp;import android.app.Activity;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.widget.RemoteViews;import android.widget.TextView;import com.zanelove.photoapp.utils.File_Tool;import com.zanelove.photoapp.view.CircleProgressBar;import java.io.*;import .HttpURLConnection;import .URL;import java.util.ArrayList;import java.util.Timer;import java.util.TimerTask;/*** 上传图片*/public class UploadImage_Activity extends Activity {private int len = 0;private NotificationManager manager;private Notification notif;private ArrayList<String> id_list;private TextView title_info;private CircleProgressBar circleProgressBar;private MyPhotoApp_Data_Application myapp;private ArrayList<String> lists;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.upload_image);myapp = (MyPhotoApp_Data_Application) getApplication();init_PutImg();}private void init_PutImg() {title_info = (TextView) findViewById(R.id.title_info);PendingIntent pIntent = PendingIntent.getActivity(UploadImage_Activity.this, 0, new Intent(), 0);manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);notif = new Notification();notif.icon = R.drawable.ic_launcher;notif.tickerText = "正在上传作答文件";notif.flags = Notification.FLAG_AUTO_CANCEL;// 通知栏显示所用到的布局文件notif.contentView = new RemoteViews(getPackageName(), R.layout.content_view);notif.contentIntent = pIntent;manager.notify(0, notif);manager.cancel(0);circleProgressBar = (CircleProgressBar) findViewById(R.id.circleProgressbar);circleProgressBar.setProgress(0);new UploadImageThread().start();}private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case 0:notif.contentView.setTextViewText(R.id.content_view_text1, len + " %");notif.contentView.setProgressBar(R.id.content_view_progress, 100, len, false);manager.notify(0, notif);circleProgressBar.setProgress(len);break;case 1:title_info.setText("作答上传完成");manager.cancel(0);break;default:break;}}};private class UploadImageThread extends Thread {private Timer timer = new Timer();@Overridepublic void run() {super.run();id_list = getIntent().getStringArrayListExtra("id_list");lists = getIntent().getStringArrayListExtra("lists");int img_sum = getIntent().getIntExtra("img_sum", 1), num = 0;int d = 100 / img_sum;timer.schedule(new TimerTask() {@Overridepublic void run() {Message msg = new Message();msg.what = 0;msg.obj = len;handler.sendMessage(msg);if (len == 100) {timer.cancel();handler.sendEmptyMessage(1);} else {if (len < 95) {len++;}}}}, 0, 1000);for (String img_path : lists) {int n = 0;for (String id : id_list) {upload(img_path, "zanelove" + "_" + id + "_" + n);n++;num++;len = num * d;}}len = 100;}}private void upload(String pathToOurFile, String name) {HttpURLConnection connection = null;DataOutputStream outputStream = null;//TODOString urlServer = myapp.getUrl_host() + "port&a=uploadPic&id=" + name + "&ueid=" + "*" + "&tcid=" + "*" + "&sid=" + myapp.getSessionid();String lineEnd = "\r\n";String twoHyphens = "--";String boundary = "*****";int bytesRead, bytesAvailable, bufferSize;byte[] buffer;int maxBufferSize = 1 * 1024 * 1024;try {FileInputStream fileInputStream = new FileInputStream(new File(upload_ys_img(pathToOurFile)));URL url = new URL(urlServer);connection = (HttpURLConnection) url.openConnection();// Allow Inputs &amp; Outputs.connection.setDoInput(true);connection.setDoOutput(true);connection.setUseCaches(false);connection.setRequestMethod("POST");connection.setRequestProperty("Connection", "Keep-Alive");connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);outputStream = new DataOutputStream(connection.getOutputStream());outputStream.writeBytes(twoHyphens + boundary + lineEnd);outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadfile\";filename=\"" + pathToOurFile + "\"" + lineEnd);outputStream.writeBytes(lineEnd);bytesAvailable = fileInputStream.available();bufferSize = Math.min(bytesAvailable, maxBufferSize);buffer = new byte[bufferSize];// Read filebytesRead = fileInputStream.read(buffer, 0, bufferSize);while (bytesRead > 0) {outputStream.write(buffer, 0, bufferSize);bytesAvailable = fileInputStream.available();bufferSize = Math.min(bytesAvailable, maxBufferSize);bytesRead = fileInputStream.read(buffer, 0, bufferSize);}outputStream.writeBytes(lineEnd);outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);//取得Response内容InputStream is = connection.getInputStream();int ch;StringBuffer sbf = new StringBuffer();while ((ch = is.read()) != -1) {sbf.append((char) ch);}fileInputStream.close();outputStream.flush();outputStream.close();} catch (Exception ex) {// Exception handling}}/*** 压缩用于上传的图片*/private String upload_ys_img(String img_path) {String[] path_arr = img_path.split("/");String[] name_arr = path_arr[path_arr.length - 1].split("\\.");String path = File_Tool.SDPATH + "image/" + name_arr[0] + ".png";BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;// 获取这个图片的宽和高Bitmap bitmap = BitmapFactory.decodeFile(img_path, options); // 此时返回bm为空options.inJustDecodeBounds = false;// 计算缩放比int be = (int) (options.outHeight / 1280);if (be <= 0)be = 1;options.inSampleSize = be;// 重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false哦bitmap = BitmapFactory.decodeFile(img_path, options);int w = bitmap.getWidth();int h = bitmap.getHeight();bitmap = compressImage(Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), false));// 这样我们就可以读取较大的图片而不会内存溢出了。如果你想把压缩后的图片保存在Sdcard上的话就很简单了:File file = new File(path);try {FileOutputStream out = new FileOutputStream(file);if (press(pressFormat.JPEG, 50, out)) {out.flush();out.close();}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return path;}private Bitmap compressImage(Bitmap image) {ByteArrayOutputStream baos = new ByteArrayOutputStream();press(pressFormat.JPEG, 80, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中int options = 100;while (baos.toByteArray().length / 1024 > 100 && options > 30) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩options -= 10;// 每次都减少10baos.reset();// 重置baos即清空press(pressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中}ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片return bitmap;}public static byte[] readInputStream(InputStream inStream) throws Exception {ByteArrayOutputStream outStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = inStream.read(buffer)) != -1) {outStream.write(buffer, 0, len);}inStream.close();return outStream.toByteArray();}}

5.设置获取图片还是照片

package com.zanelove.photoapp.view;import android.app.Activity;import android.app.Dialog;import android.content.Intent;import android.view.Display;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.TextView;import com.zanelove.photoapp.R;import com.zanelove.photoapp.utils.SelectPhotoUtil;/**** 设置获取图片还是照片* Created by zanelove on -5-5.**/public class Pop_Viewpager_Item_Pz {private static final int CAMERA_WITH_DATA = 1001;private static final int PHOTO_PICKED_WITH_DATA = 1002;private Activity activity;private TextView viewpager_pop_pz_pz, viewpager_pop_pz_xc, viewpager_pop_pz_back;public Dialog mDialog;public Dialog getmDialog() {return mDialog;}public void setmDialog(Dialog mDialog) {this.mDialog = mDialog;}public Pop_Viewpager_Item_Pz(Activity context) {activity = context;mDialog = new Dialog(context, R.style.Setting_Question_Submit_Dialog_Style);mDialog.setContentView(R.layout.viewpager_item_pop_pz);Window window = mDialog.getWindow();WindowManager wm = context.getWindowManager();Display d = wm.getDefaultDisplay(); // 获取屏幕宽、高用WindowManager.LayoutParams p = window.getAttributes();p.width = (int) (d.getWidth() * 0.85);window.setAttributes(p);mDialog.setFeatureDrawableAlpha(Window.FEATURE_OPTIONS_PANEL, 0);window.setWindowAnimations(android.R.anim.fade_in);viewpager_pop_pz_pz = (TextView) mDialog.findViewById(R.id.viewpager_pop_pz_pz);viewpager_pop_pz_pz.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {doTakePhoto();}});viewpager_pop_pz_xc = (TextView) mDialog.findViewById(R.id.viewpager_pop_pz_xc);viewpager_pop_pz_xc.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {doSelectImageFromLoacal();}});viewpager_pop_pz_back = (TextView) mDialog.findViewById(R.id.viewpager_pop_pz_back);viewpager_pop_pz_back.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {dismiss();}});}public void show() {mDialog.show();}public void dismiss() {mDialog.dismiss();}/*** 拍照获取图片*/private void doTakePhoto() {SelectPhotoUtil.takePhoto(activity);mDialog.dismiss();}/*** 从本地手机中选择图片*/private void doSelectImageFromLoacal() {Intent localIntent = new Intent();localIntent.setType("image/*");localIntent.setAction(Intent.ACTION_GET_CONTENT);localIntent.addCategory(Intent.CATEGORY_OPENABLE);Intent localIntent2 = Intent.createChooser(localIntent, "选择图片");activity.startActivityForResult(localIntent2, PHOTO_PICKED_WITH_DATA);mDialog.dismiss();}}

6.使用照相机拍照获取图片

package com.zanelove.photoapp.utils;import android.app.Activity;import android.content.ContentValues;import android.content.Intent;import android.database.Cursor;import .Uri;import android.os.Build;import android.os.Environment;import android.provider.MediaStore;import android.widget.Toast;import com.zanelove.photoapp.MainActivity;/*** Created by zanelove on -5-5.*/public class SelectPhotoUtil {/*** 使用照相机拍照获取图片*/public static final int SELECT_PIC_BY_TACK_PHOTO = 1001;private static Uri photoUri;private static String picPath = null;/*** 拍照获取图片*/public static void takePhoto(Activity activity) {String SDState = Environment.getExternalStorageState();if (SDState.equals(Environment.MEDIA_MOUNTED)) {Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//"android.media.action.IMAGE_CAPTURE"ContentValues values = new ContentValues();photoUri = activity.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);activity.startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);} else {Toast.makeText(activity, "内存卡不存在", Toast.LENGTH_LONG).show();}}/*** 选择图片后,获取图片的路径* @param activity*/public static void doPhoto(Activity activity) {String[] pojo = {MediaStore.Images.Media.DATA};Cursor cursor = activity.managedQuery(photoUri, pojo, null, null, null);if (cursor != null) {int columnIndex = cursor.getColumnIndexOrThrow(pojo[0]);cursor.moveToFirst();picPath = cursor.getString(columnIndex);try {//4.0以上的版本会自动关闭 (4.0--14; ; 4.0.3--15)if (Integer.parseInt(Build.VERSION.SDK) < 14) {cursor.close();}} catch (Exception e) {}}if (picPath != null && (picPath.endsWith(".png") || picPath.endsWith(".PNG") || picPath.endsWith(".jpg") || picPath.endsWith(".JPG"))) {if(activity instanceof MainActivity) {((MainActivity)activity).setImageViewByTask(picPath);}} else {Toast.makeText(activity, "选择图片文件不正确", Toast.LENGTH_LONG).show();}}}

7.监听上传进度页面(content_view.xml)

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><ImageViewandroid:id="@+id/icon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginLeft="@dimen/size_10dp"android:layout_marginRight="@dimen/size_10dp"android:background="@drawable/ic_launcher" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginRight="@dimen/size_10dp"android:layout_toRightOf="@+id/icon" ><TextViewandroid:id="@+id/content_view_text1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_marginTop="@dimen/size_8dp"android:text="0 %"android:textColor="@color/color_c50619"android:textSize="@dimen/size_14dp" /><ProgressBarandroid:id="@+id/content_view_progress"style="@android:style/Widget.ProgressBar.Horizontal"android:layout_width="fill_parent"android:layout_height="1dp"android:layout_below="@+id/content_view_text1"android:layout_marginTop="14dp"android:max="100"android:progressDrawable="@drawable/barcolor" /></RelativeLayout></RelativeLayout>

8.上传进度条展示页面(upload_image.xml)

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/color_bg_hui" ><includeandroid:id="@+id/yuan"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"layout="@layout/my_circle_progressbar_relativelayout" /><TextViewandroid:id="@+id/title_info"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_above="@+id/yuan"android:layout_centerHorizontal="true"android:layout_marginBottom="@dimen/size_25dp"android:text="@string/upload_image_text"android:textColor="@color/color_666"android:textSize="@dimen/size_16dp" /></RelativeLayout>

10.选择拍照和选取图片UI页面(viewpager_item_pop_pz.xml)

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><ImageViewandroid:id="@+id/viewpager_pop_pz_iv"android:layout_width="match_parent"android:layout_height="@dimen/size_20dp"android:layout_alignParentBottom="true" /><TextViewandroid:id="@+id/viewpager_pop_pz_back"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_above="@+id/viewpager_pop_pz_iv"android:layout_marginTop="@dimen/size_12dp"android:background="@drawable/viewpager_pop_pz_shape"android:clickable="true"android:gravity="center"android:padding="@dimen/size_12dp"android:text="取消"android:textColor="@drawable/bt_bg_selector_bgtofc4025_tv"android:textSize="@dimen/size_20dp" /><RelativeLayoutandroid:id="@+id/viewpager_pop_pz"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_above="@+id/viewpager_pop_pz_back"android:background="@drawable/viewpager_pop_pz_shape" ><TextViewandroid:id="@+id/viewpager_pop_pz_pz"android:layout_width="match_parent"android:layout_height="wrap_content"android:clickable="true"android:gravity="center"android:padding="@dimen/size_12dp"android:text="拍照"android:textColor="@drawable/bt_bg_selector_bgtofc4025_tv"android:textSize="@dimen/size_20dp" /><ImageViewandroid:id="@+id/viewpager_pop_pz_line"android:layout_width="match_parent"android:layout_height="0.5dp"android:layout_below="@+id/viewpager_pop_pz_pz"android:background="@color/color_c9" /><TextViewandroid:id="@+id/viewpager_pop_pz_xc"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/viewpager_pop_pz_line"android:clickable="true"android:gravity="center"android:padding="@dimen/size_12dp"android:text="从相册选取"android:textColor="@drawable/bt_bg_selector_bgtofc4025_tv"android:textSize="@dimen/size_20dp" /></RelativeLayout></RelativeLayout>

源代码下载

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。