Android拍照选择图片并上传功能的实现思路(包含权限动态获取)

  

作为一个Android新手,想实现手机拍照并上传的功能,经过查找资料,已实现此功能。在此记录备忘。老鸟请忽略。

  

  

1.安卓手机客户端,拍照(或选择图片),然后上传到服务器。

  

2。服务器端接收手机端上传上来的图片。

  

  

1。按惯例,先放效果图:

  

 Android拍照选择图片并上传功能的实现思路(包含权限动态获取)

  

项目结构:

  

 Android拍照选择图片并上传功能的实现思路(包含权限动态获取)

  

2. activity_main.xml         & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt; LinearLayout xmlns: android=" http://schemas.android.com/apk/res/android "   android: layout_width=" match_parent "   android: layout_height=" match_parent "   android:取向=按怪薄?   android:填充=" 5 dp "比;      & lt; TextView   android: layout_width=" wrap_content "   android: layout_height=" wrap_content "   android:文本="图片预览”/比;      & lt; ImageView   android: id=癅 + id/imageView”   android: layout_width=" match_parent "   android: layout_height=" 400 dp”   android:背景=" # fff”   android:填充=" 1 dp "   android: scaleType=" fitXY "/比;      LinearLayout & lt;   android: layout_width=" wrap_content "   android: layout_height=" wrap_content "   android: layout_gravity=" center_horizontal "   面向android:="水平"比;      & lt;按钮   android: id=癅 + id/btnPhoto”   android: layout_width=" wrap_content "   android: layout_height=" wrap_content "   android:文本="拍照”/比;      & lt;按钮   android: id=癅 + id/btnSelect”   android: layout_width=" wrap_content "   android: layout_height=" wrap_content "   android:文本="选择”/比;   & lt;/LinearLayout>   & lt;/LinearLayout>      

3. mainactivity.java         包com.qingshan.note;   进口androidx.annotation.NonNull;   进口androidx.annotation.RequiresApi;   进口androidx.appcompat.app.AppCompatActivity;   进口androidx.core.app.ActivityCompat;   进口androidx.core.content.ContextCompat;   进口android.Manifest;   进口android.app.AlertDialog;   进口android.content.ContentValues;   进口android.content.DialogInterface;   进口android.content.Intent;   进口android.content.pm.PackageManager;   进口android.graphics.Bitmap;   进口android.graphics.BitmapFactory;   进口android.graphics.Matrix;   进口android.net.Uri;   进口android.os.Build;   进口android.os.Bundle;   进口android.os.Environment;   进口android.provider.MediaStore;   进口android.provider.Settings;   进口android.view.View;   进口android.widget.Button;   进口android.widget.ImageView;   进口android.widget.Toast;   进口java.io.BufferedReader;   进口java.io.DataInputStream;   进口java.io.DataOutputStream;   进口java.io.File;   进口java.io.FileInputStream;   进口java.io.FileNotFoundException;   进口java.io.FileOutputStream;   进口java.io.IOException;   进口java.io.InputStreamReader;   进口java.io.OutputStream;   进口java.net.HttpURLConnection;   进口java.net.URL;   进口java.text.SimpleDateFormat;   进口java.util.ArrayList;   进口java.util.Date;   进口java.util.HashMap;   进口java.util.Iterator;   进口并不知道;   进口java.util.Map;   公共类MainActivity AppCompatActivity延伸实现视图。OnClickListener {   私人按钮btnPhoto btnSelect;   私人目的意图;   私人最终int相机=1;//事件枚举(可以自定义)   私人最终int选择=2;//事件枚举(可以自定义)   私人最终字符串postUrl=" http://qingshanboke.com/Home/AndoridUploadFile ",//接收上传图片的地址   字符串photoPath=" ";//要上传的图片路径   私人最终int permissionCode=100;//权限请求码//权限集合,对应在AndroidManifest.xml文件中添加配置//& lt; uses-permission android: name=" android.permission。相机”/比;//& lt; uses-permission android: name=" android.permission。WRITE_EXTERNAL_STORAGE”/比;//& lt; uses-permission android: name=" android.permission。ACCESS_NETWORK_STATE”/比;//& lt; uses-permission android: name=" android.permission.ACCESS_WIFI_STATE "/比;//& lt; uses-permission android: name=" android.permission.INTERNET "/比;   新String []={String[]权限   Manifest.permission.CAMERA,   Manifest.permission.WRITE_EXTERNAL_STORAGE,   Manifest.permission.ACCESS_NETWORK_STATE,   Manifest.permission.ACCESS_WIFI_STATE,   Manifest.permission.INTERNET   };   AlertDialog AlertDialog;   @Override   受保护的空白\ r \ n”) .append (“-”) .append(边界).append (" \ r \ n ");   缓冲区。追加(“附加项:格式;name=\ " + inputName +”\“\ r \ n \ r \ n”);   buffer.append (inputValue);   }   .getBytes out.write (buffer.toString () ());   }//文件   如果(fileMap !=null) {   迭代器iter=fileMap.entrySet () .iterator ();   而(iter.hasNext ()) {   地图。输入条目=(map . Entry) iter.next ();   字符串inputName=(字符串)entry.getKey ();   字符串inputValue=https://www.yisu.com/zixun/(字符串)entry.getValue ();   如果(inputValue==null) {   继续;   }   文件文件=新文件(inputValue);   字符串文件名=file.getName ();   字符串contentType=" ";   如果(filename.endsWith (" . jpg ")) {   contentType=巴枷?jpg”;   }else if (filename.endsWith (png)) {   contentType=巴枷?png”;   }else if (contentType==null | | contentType.equals (" ")) {   contentType=坝τ贸绦?八进制”;   }   StringBuffer缓冲=new StringBuffer ();   buffer.append (“\ r \ n”) .append (“-”) .append(边界).append (" \ r \ n ");   缓冲区。追加(“附加项:格式;name=\ " + inputName +“\”;文件名=\ " +文件名+ \ \ r \ n”);   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Android拍照选择图片并上传功能的实现思路(包含权限动态获取)