Get filepath and filename of selected gallery image in Android

后端 未结 9 2129
天命终不由人
天命终不由人 2020-11-27 04:47

I am creating an app which uploads a selected image from the gallery and uploads it to a web service. The webservice requires the filename of selected image plus a base64 e

9条回答
  •  臣服心动
    2020-11-27 05:34

    If you are like me and you dont have a local file ready, for instance you want to give user a chance to take a picture and then upload the picture this is how to do it. I am a noob in java but i have allot of experience in coding. Stackoverflow helped me allot so now it is my time to do something back.

    Under class activity you have to declare these two items. asuming you have a working upload class and php script.

    NOTE i am not taking any consideration about all the different API's out there. I am using java compiler 1.7 and a API range of 10 to 18.

    public class Yourproject extends Activity {
    File imageFile;
    File imageFileName;
    
    //This part is needed for decoding the path adres.
    
     private String getRealPathFromURI(Uri contentURI) {
                String result;
                Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
                if (cursor == null) { // Source is Dropbox or other similar local file path
                    result = contentURI.getPath();
                } else { 
                    cursor.moveToFirst(); 
                    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME); 
                    result = cursor.getString(idx);
                    cursor.close();
                }
                return result;
            }
    
    //This is needed for the path name, now you might just want to use one decoding script depending on //your class in total.
    //In my case this was the way to go.
    //To use one single addres use this line ImageColumns.DATA in the int idx declaration.
    
            private String getRealPathFromNAME(Uri contentNAME) {
                String result;
                Cursor cursor = getContentResolver().query(contentNAME, null, null, null, null);
                if (cursor == null) { // Source is Dropbox or other similar local file path
                    result = contentNAME.getPath();
                } else { 
                    cursor.moveToFirst(); 
                    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DISPLAY_NAME); 
                    result = cursor.getString(idx);
                    cursor.close();
                }
                return result;
            }
    
    //Then under protected void onCreate(Bundle savedInstanceState) you place this code to get 
    //the image and process it.
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            //declare the ImageView
            final ImageView inputPicture = (ImageView) findViewById(R.id.imageView2);
    
            inputPicture.setImageURI((Uri) getIntent().getExtras().get("picture"));
            //here where recieve the image from last page "Putextra" method
    
    
            try {
                //here we will get the data and proces it trough to get the real 
                //address for uploading.
                //This is send from a other activity with a Intent.EXTRA_STREAM
                //The code looks like this:
                /*********"Putextra"*********/
                //final ImageView iv = (ImageView) findViewById(R.id.imageView1);
                //final Uri thumb = (Uri) getIntent().getExtras().get(Intent.EXTRA_STREAM);
                //iv.setImageURI(thumb);
    
                //Sending it to the next activity
    
                //it.putExtra("picture", thumb);    
                /*********"Putextra"*********/
    
                Uri fileUri = (Uri) getIntent().getExtras().get("picture");
                //get 
                //Uri fileName = (Uri) getIntent().getExtras().get("picture");
                //get
                imageFile = new File(getRealPathFromURI(fileUri));
                //send
                imageFileName = new File(getRealPathFromNAME(fileUri));
                //send
                //i got a exeption Uri fileName, use fileUri twice..
            } catch (Exception e2) {
                // TODO Auto-generated catch block
                e2.printStackTrace();
            }
            //here we will declare the name for furter processing.
            final File uploadFilePath = imageFile;
            final File uploadFileName = imageFileName;
    
    
    }
    

    And the rest i will leave up to u, if you got this far, I am pretty sure you will finish.

提交回复
热议问题