android选择图片或拍照图片上传到服务器(包括上传参数)
open failed: EACCES (Permission denied)"权限已加,写入sd卡仍报错的解决办法
权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
界面:
代码:
load_weight_item.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/upload_pic" android:layout_width="match_parent" android:layout_height="290dp" android:layout_gravity="center_horizontal" android:layout_alignParentRight="true" android:layout_below="@+id/receive_weight" android:layout_centerVertical="true" android:layout_marginTop="10dp" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:adjustViewBounds="true"/> <Button android:id="@+id/select_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:layout_marginLeft="30.0dip" android:layout_marginRight="30.0dip" android:layout_gravity="center" android:layout_centerInParent="true" android:scaleType="fitXY" android:background="@mipmap/select_pic_btn" /> <Button android:id="@+id/upload_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_marginLeft="30.0dip" android:layout_marginRight="30.0dip" android:layout_gravity="center" android:layout_centerInParent="true" android:scaleType="fitXY" android:background="@mipmap/upload_btn" /> </LinearLayout>
upload_pic.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_margin="10dp" android:paddingBottom="10dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="vertical" > <Button android:id="@+id/btn_pop_album" android:layout_width="match_parent" android:layout_height="45dp" android:text="本地相册" android:background="#ffff" android:textSize="18sp" /> <Button android:id="@+id/btn_pop_camera" android:layout_width="match_parent" android:layout_height="45dp" android:text="相机拍摄" android:background="#ffff" android:textSize="18sp" /> <Button android:id="@+id/btn_pop_cancel" android:layout_width="match_parent" android:layout_height="45dp" android:layout_marginTop="10dp" android:background="#ffff" android:text="取消" android:textSize="18sp" /> </LinearLayout> </RelativeLayout>
import android.Manifest; import android.annotation.SuppressLint; import android.content.ContentUris; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.DocumentsContract; import android.provider.MediaStore; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.text.TextUtils; import android.view.Gravity; import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.PopupWindow; import android.widget.Toast; import java.io.File; import java.io.FileNotFoundException; import zpwmall.com.tms.R; import zpwmall.com.tms.adapter.UploadAsyncTask; import zpwmall.com.tms.constant.Contants; import zpwmall.com.tms.utils.MyApplication; public class WeightActivity extends BaseActivity { private ImageView upload_pic; private Button select_btn,upload_btn; private File photoFile = null; private Uri tempUri = null; private EditText send_weight,receive_weight; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.load_weight_item); //Toast.makeText(this, "test", Toast.LENGTH_SHORT).show(); upload_pic = (ImageView)findViewById(R.id.upload_pic); select_btn = (Button)findViewById(R.id.select_btn); upload_btn = (Button)findViewById(R.id.upload_btn); send_weight = (EditText)findViewById(R.id.send_weight); receive_weight = (EditText)findViewById(R.id.receive_weight); upload_pic.setVisibility(View.GONE); select_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showPopWindow(); } }); upload_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String send = send_weight.getText().toString(); String receive = receive_weight.getText().toString(); if(TextUtils.isEmpty(send)){ Toast.makeText(MyApplication.getContext(), R.string.pls_input_send_weight, Toast.LENGTH_SHORT).show(); return; } if(TextUtils.isEmpty(receive)){ Toast.makeText(MyApplication.getContext(), R.string.pls_input_receive_weight, Toast.LENGTH_SHORT).show(); return; } if(upload_pic.getDrawable() == null || upload_pic.getDrawable().getCurrent() == null || upload_pic.getDrawable().getCurrent().getConstantState() == null){ Toast.makeText(MyApplication.getContext(), R.string.pls_select_or_take_photo, Toast.LENGTH_SHORT).show(); return; } //String filePath = tempUri.getEncodedPath(); String filePath = getPathByUri4kitkat(MyApplication.getContext(),tempUri); final String imagePath = Uri.decode(filePath); new UploadAsyncTask(WeightActivity.this,imagePath).execute(); } }); } private void showPopWindow(){ View popView = View.inflate(this,R.layout.upload_pic,null); Button bt_album = (Button) popView.findViewById(R.id.btn_pop_album); Button bt_camera = (Button) popView.findViewById(R.id.btn_pop_camera); Button bt_cancle = (Button) popView.findViewById(R.id.btn_pop_cancel); //获取屏幕宽高 int weight = getResources().getDisplayMetrics().widthPixels; int height = getResources().getDisplayMetrics().heightPixels*1/3; final PopupWindow popupWindow = new PopupWindow(popView,weight,height); //popupWindow.setAnimationStyle(R.style.anim_popup_dir); popupWindow.setFocusable(true); //点击外部popueWindow消失 popupWindow.setOutsideTouchable(true); bt_album.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, Contants.RESULT_LOAD_IMAGE); popupWindow.dismiss(); } }); bt_camera.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { takeCamera(); popupWindow.dismiss(); } }); bt_cancle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { popupWindow.dismiss(); } }); //popupWindow消失屏幕变为不透明 popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = 1.0f; getWindow().setAttributes(lp); } }); //popupWindow出现屏幕变为半透明 WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = 0.5f; getWindow().setAttributes(lp); popupWindow.showAtLocation(popView, Gravity.BOTTOM,0,50); } private void takeCamera() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // Ensure that there's a camera activity to handle the intent if (takePictureIntent.resolveActivity(getPackageManager()) != null) { // Create the File where the photo should go String mTempPhotoPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + File.separator + "photo.jpeg"; photoFile = new File(mTempPhotoPath); //photoFile = createImageFile(); // Continue only if the File was successfully created if (photoFile != null) { takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); } } startActivityForResult(takePictureIntent, Contants.RESULT_CAMERA_IMAGE);//跳转界面传回拍照所得数据 } /* private File createImageFile() { File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); File image = null; try { image = File.createTempFile( generateFileName(), *//* prefix *//* ".jpg", *//* suffix *//* storageDir *//* directory *//* ); } catch (IOException e) { e.printStackTrace(); } String mCurrentPhotoPath = image.getAbsolutePath(); return image; } public static String generateFileName() { String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); String imageFileName = "JPEG_" + timeStamp + "_"; return imageFileName; }*/ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK ) { if (requestCode == Contants.RESULT_LOAD_IMAGE) { Uri selectedImage = data.getData(); tempUri = selectedImage; }else if (requestCode == Contants.RESULT_CAMERA_IMAGE){ Uri uri = Uri.fromFile(photoFile); tempUri = uri; } if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申请WRITE_EXTERNAL_STORAGE权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1); }else{ try { Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(tempUri)); upload_pic.setImageBitmap(bitmap); upload_pic.setVisibility(View.VISIBLE); } catch (FileNotFoundException e) { e.printStackTrace(); } } } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case 1: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { try { Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(tempUri)); upload_pic.setImageBitmap(bitmap); upload_pic.setVisibility(View.VISIBLE); } catch (FileNotFoundException e) { e.printStackTrace(); } } else { Toast.makeText(this, "deny", Toast.LENGTH_SHORT).show(); } return; } } super.onRequestPermissionsResult(requestCode, permissions, grantResults); } // 专为Android4.4设计的从Uri获取文件绝对路径,以前的方法已不好使 @SuppressLint("NewApi") public static String getPathByUri4kitkat(final Context context, final Uri uri) { final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; // DocumentProvider if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { if (isExternalStorageDocument(uri)) {// ExternalStorageProvider final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; if ("primary".equalsIgnoreCase(type)) { return Environment.getExternalStorageDirectory() + "/" + split[1]; } } else if (isDownloadsDocument(uri)) {// DownloadsProvider final String id = DocumentsContract.getDocumentId(uri); final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); return getDataColumn(context, contentUri, null, null); } else if (isMediaDocument(uri)) {// MediaProvider final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; Uri contentUri = null; if ("image".equals(type)) { contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; } else if ("video".equals(type)) { contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; } else if ("audio".equals(type)) { contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; } final String selection = "_id=?"; final String[] selectionArgs = new String[] { split[1] }; return getDataColumn(context, contentUri, selection, selectionArgs); } } else if ("content".equalsIgnoreCase(uri.getScheme())) {// MediaStore // (and // general) return getDataColumn(context, uri, null, null); } else if ("file".equalsIgnoreCase(uri.getScheme())) {// File return uri.getPath(); } return null; } /** * Get the value of the data column for this Uri. This is useful for * MediaStore Uris, and other file-based ContentProviders. * * @param context * The context. * @param uri * The Uri to query. * @param selection * (Optional) Filter used in the query. * @param selectionArgs * (Optional) Selection arguments used in the query. * @return The value of the _data column, which is typically a file path. */ public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) { Cursor cursor = null; final String column = "_data"; final String[] projection = { column }; try { cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); if (cursor != null && cursor.moveToFirst()) { final int column_index = cursor.getColumnIndexOrThrow(column); return cursor.getString(column_index); } } finally { if (cursor != null) cursor.close(); } return null; } public static boolean isExternalStorageDocument(Uri uri) { return "com.android.externalstorage.documents".equals(uri.getAuthority()); } public static boolean isDownloadsDocument(Uri uri) { return "com.android.providers.downloads.documents".equals(uri.getAuthority()); } public static boolean isMediaDocument(Uri uri) { return "com.android.providers.media.documents".equals(uri.getAuthority()); } }
上传异步任务:
import android.os.AsyncTask; import android.util.Log; import android.widget.Toast; import com.alibaba.fastjson.JSONObject; import java.io.File; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import zpwmall.com.tms.ui.WeightActivity; import zpwmall.com.tms.utils.MyApplication; /** * Created by Administrator on 2018/6/13. */ public class UploadAsyncTask extends AsyncTask<String, Integer, String> { private String imagePath; private WeightActivity context; public UploadAsyncTask(){} public UploadAsyncTask(WeightActivity context,String path){ this.imagePath = path; this.context = context; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(String... param) { OkHttpClient mOkHttpClient = new OkHttpClient(); String result = "error"; MultipartBody.Builder builder = new MultipartBody.Builder(); builder.addFormDataPart("image", imagePath, RequestBody.create(MediaType.parse("image/jpeg"), new File(imagePath))); RequestBody requestBody = builder.build(); Request.Builder reqBuilder = new Request.Builder(); Request request = reqBuilder .url("http://xx/itemUpload") .post(requestBody) .build(); Log.d("UploadAsyncTask", "请求地址 http://xx/itemUpload"); try{ Response response = mOkHttpClient.newCall(request).execute(); Log.d("UploadAsyncTask", "响应码 " + response.code()); if (response.isSuccessful()) { String resultValue = response.body().string(); Log.d("UploadAsyncTask", "响应体 " + resultValue); return resultValue; } } catch (Exception e) { e.printStackTrace(); } return result; } @Override protected void onPostExecute(String result) { JSONObject json = JSONObject.parseObject(result); Log.i("result", result); if (json.getString("ret").equals("true")) { Toast.makeText(MyApplication.getContext(), "上传成功!", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(MyApplication.getContext(), "上传失败!", Toast.LENGTH_SHORT).show(); } } }
..
相关推荐
input type=file 调取手机照相机和选择照片上传 附件下载demo导入运行即可
选择照片,可以拍照和相册选择照片,可以控制照片数量。
android studio 调用摄像头拍照或选择相册照片,拿到图片并存储图片
Android照片选择-通过拍照或相册来选择照片,这里只是演示一下选择照片的基本的操作。
选择照片,拍照,视频
PhotoPicker 照片选择器,相机拍照选取图片
见我的博客 http://blog.csdn.net/robinson_911/article/details/46848259
实现了类似微信发送照片时选择最近照片、其他相册照片、以及拍照功能。 使用简单,源码已经打包成library,只需要引入,以及在自己的工程中注册两个activity以及一个读取SD卡权限
选择本地图片和照相功能.然后可以自己加上其他功能。
虽然调用摄像头拍照既方便又快捷,但并不是每一次我们都需要去当场拍一张照片的。 因为每个人的手机相册里应该都会存有许许多多张照片,直接从相册里选取...下面我们就来看一下,如何才能实现从相册中选择照片的 功能。
web拍照与相册选择上传照片
在日常开发过程中,这三种功能是再常见不过了,网上相关的文档也一大堆,不过未免让人眼花撩乱,因此...(PS:目前相册选择照片和调用摄像头拍照已经实现了压缩,录制小视频暂未实现,哪位大佬有好的建议,请指教!)
仿微信发送图片时可选择临时拍照发送或者直接选择相册中某个照片进行发送
Android手机中的相册里的图片照片选择,裁剪以及拍照等功能
delphi xe5 android 调用照相机获取拍的照片
可以选择多张照片,和拍照,
android 拍照,相册选择照片,主要就是怎么打开摄像头,相册
仿微信选择最近照片、其他相册照片、以及拍照功能。源码已经打包成library,引入后注册两个activity以及一个读取SD卡权限即可 [注意:本资源来自网络,如有侵权,请联系我删除,谢谢。]
检索照片,以gridview形式展现,首个gridview为拍照
ionic 通过项目需求拍照,从照片库中选择照片,预览照片,全部写好,代码拿来直接用就可以。