Get/pick an image from Android's built-in Gallery app programmatically

前端 未结 19 1152
终归单人心
终归单人心 2020-11-22 00:49

I am trying to open an image / picture in the Gallery built-in app from inside my application.

I have a URI of the picture (the picture is located on the SD card).

19条回答
  •  既然无缘
    2020-11-22 01:18

    Quickest way to open image from gallery or camera.

    Original reference : get image from gallery in android programmatically

    Following method will receive image from gallery or camera and will show it in an ImageView. Selected image will be stored internally.

    code for xml

    
    
    
        

    JAVA class

    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.media.MediaScannerConnection;
    import android.os.Environment;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.Toast;
    import com.androidquery.AQuery;
    import org.json.JSONException;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Calendar;
    import java.util.HashMap;
    
    public class MainActivity extends AppCompatActivity implements AsyncTaskCompleteListener{
    
        private ParseContent parseContent;
        private Button btn;
        private ImageView imageview;
        private static final String IMAGE_DIRECTORY = "/demonuts_upload_camera";
        private final int CAMERA = 1;
        private AQuery aQuery;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            parseContent = new ParseContent(this);
            aQuery = new AQuery(this);
    
            btn = (Button) findViewById(R.id.btn);
            imageview = (ImageView) findViewById(R.id.iv);
    
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(intent, CAMERA);
                }
            });
    
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
    
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == this.RESULT_CANCELED) {
                return;
            }
            if (requestCode == CAMERA) {
                Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
                String path = saveImage(thumbnail);
                try {
                    uploadImageToServer(path);
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }
    
        private void uploadImageToServer(final String path) throws IOException, JSONException {
    
            if (!AndyUtils.isNetworkAvailable(MainActivity.this)) {
                Toast.makeText(MainActivity.this, "Internet is required!", Toast.LENGTH_SHORT).show();
                return;
            }
    
            HashMap map = new HashMap();
            map.put("url", "https://demonuts.com/Demonuts/JsonTest/Tennis/uploadfile.php");
            map.put("filename", path);
            new MultiPartRequester(this, map, CAMERA, this);
            AndyUtils.showSimpleProgressDialog(this);
        }
    
        @Override
        public void onTaskCompleted(String response, int serviceCode) {
            AndyUtils.removeSimpleProgressDialog();
            Log.d("res", response.toString());
            switch (serviceCode) {
    
                case CAMERA:
                    if (parseContent.isSuccess(response)) {
                        String url = parseContent.getURL(response);
                        aQuery.id(imageview).image(url);
                    }
            }
        }
    
        public String saveImage(Bitmap myBitmap) {
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            myBitmap.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
            File wallpaperDirectory = new File(
                    Environment.getExternalStorageDirectory() + IMAGE_DIRECTORY);
            // have the object build the directory structure, if needed.
            if (!wallpaperDirectory.exists()) {
                wallpaperDirectory.mkdirs();
            }
    
            try {
                File f = new File(wallpaperDirectory, Calendar.getInstance()
                        .getTimeInMillis() + ".jpg");
                f.createNewFile();
                FileOutputStream fo = new FileOutputStream(f);
                fo.write(bytes.toByteArray());
                MediaScannerConnection.scanFile(this,
                        new String[]{f.getPath()},
                        new String[]{"image/jpeg"}, null);
                fo.close();
                Log.d("TAG", "File Saved::--->" + f.getAbsolutePath());
    
                return f.getAbsolutePath();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            return "";
        }
    }
    

提交回复
热议问题