Я хочу реализовать функцию, которая, если пользователь нажимает кнопку резервного копирования, приложение автоматически принимает все изображения из галереи, а затем отправляет их на сервер. На данный момент, что я сделал, пользователь нажимает кнопку, затем выбирает изображение, а затем отправляю фотографию на сервер, но я хочу сделать все, чтобы сохранить все изображения, хранящиеся на карте памяти или на телефоне.
Как я могу это сделать ?
Вот мой рабочий код для выбора фотографии, а затем отправки на сервер
Основная деятельность
public class MainActivity extends Activity{ Uri currImageURI; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button upload_btn = (Button) this.findViewById(R.id.uploadButton); upload_btn.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { // To open up a gallery browser Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Picture"),1); }}); } public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == 1) { // currImageURI is the global variable I'm using to hold the content: currImageURI = data.getData(); System.out.println("Current image Path is ----->" + getRealPathFromURI(currImageURI)); HttpUploader uploader = new HttpUploader(); try { uploader.execute(getRealPathFromURI(currImageURI)).get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } TextView tv_path = (TextView) findViewById(R.id.path); tv_path.setText(getRealPathFromURI(currImageURI)); } } } //Convert the image URI to the direct file system path of the image file public String getRealPathFromURI(Uri contentUri) { String [] proj={MediaStore.Images.Media.DATA}; android.database.Cursor cursor = managedQuery( contentUri, proj, // Which columns to return null, // WHERE clause; which rows to return (all rows) null, // WHERE clause selection arguments (none) null); // Order-by clause (ascending by name) int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } }
HttpUploader
public class HttpUploader extends AsyncTask<String, Void, String> { protected String doInBackground(String... path) { String outPut = null; for (String sdPath:path) { Bitmap bitmapOrg = BitmapFactory.decodeFile(sdPath); ByteArrayOutputStream bao = new ByteArrayOutputStream(); //Resize the image double width = bitmapOrg.getWidth(); double height = bitmapOrg.getHeight(); double ratio = 400/width; int newheight = (int)(ratio*height); System.out.println("———-width" + width); System.out.println("———-height" + height); bitmapOrg = Bitmap.createScaledBitmap(bitmapOrg, 400, newheight, true); //Here you can define .PNG as well bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 95, bao); byte[] ba = bao.toByteArray(); String ba1 = Base64.encodeToString(ba, 0); System.out.println("uploading image now ——–" + ba1); ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("image", ba1)); try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("httppath"); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); // print responce outPut = EntityUtils.toString(entity); Log.i("GET RESPONSE—-", outPut); //is = entity.getContent(); Log.e("log_tag ******", "good connection"); bitmapOrg.recycle(); } catch (Exception e) { Log.e("log_tag ******", "Error in http connection " + e.toString()); } } return outPut; } }
Вы можете использовать следующий метод, чтобы получить список всех файлов в ArrayList
.
private ArrayList<Uri> getFileList() { ArrayList<Uri> fileList = new ArrayList<Uri>(); try { String[] proj = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID }; Cursor actualimagecursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj, null, null, MediaStore.Images.Media.DEFAULT_SORT_ORDER); int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID); for ( int i = 0 ; i < actualimagecursor.getCount() ; i++ ) { actualimagecursor.moveToPosition(i); String fileName = actualimagecursor.getString(actual_image_column_index); fileList.add(( Uri.withAppendedPath( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, fileName ))); //fileName = ( Uri.withAppendedPath( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, fileName ).toString() ); } return fileList; } catch ( Exception e ) { return null; } }
Затем вы можете запустить цикл for, который загружает файл один за другим.
ArrayList<Uri> fileName = getFileList(); for ( int i = 0 ; i < fileName.size() ; i++ ) { HttpUploader uploader = new HttpUploader(); try { uploader.execute(getRealPathFromURI(fileName.get(i))).get(); Thread.sleep(1000); // a pause of 1 sec befor uploading next image. } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } }