Open gallery app from Android Intent

后端 未结 6 1204
难免孤独
难免孤独 2020-11-29 04:30

I\'m looking for a way to open the Android gallery application from an intent.

I do not want to return a picture, but rather just open the gallery to al

6条回答
  •  北荒
    北荒 (楼主)
    2020-11-29 05:10

    1. Following can be used in Activity or Fragment.

       private File mCurrentPhoto;
      
    2. Add permissions

      
      
      
    3. Add Intents to open "image-selector" and "photo-capture"

      //A system-based view to select photos.
      private void dispatchPhotoSelectionIntent() {
      Intent galleryIntent = new Intent(Intent.ACTION_PICK,
              android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
      this.startActivityForResult(galleryIntent, REQUEST_IMAGE_SELECTOR);
      }
      
      
      
          //Open system camera application to capture a photo.
          private void dispatchTakePictureIntent() {
      Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      // Ensure that there's a camera activity to handle the intent
      if (takePictureIntent.resolveActivity(App.Instance.getPackageManager()) != null) {
          try {
              createImageFile();
          } catch (IOException ex) {
              // Error occurred while creating the File
          }
          // Continue only if the File was successfully created
          if (mCurrentPhoto != null) {
              takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mCurrentPhoto));
              startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
          }
      }
      }
      
    4. Add handling when getting photo.

      @Override
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
      switch (requestCode) {
      case REQUEST_IMAGE_SELECTOR:
          if (resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
              String[] filePathColumn = { MediaStore.Images.Media.DATA };
              Cursor cursor = App.Instance.getContentResolver().query(data.getData(), filePathColumn, null, null, null);
              if (cursor == null || cursor.getCount() < 1) {
                  mCurrentPhoto = null;
                  break;
              }
              cursor.moveToFirst();
              int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
              if(columnIndex < 0) { // no column index
                  mCurrentPhoto = null;
                  break;
              }
              mCurrentPhoto = new File(cursor.getString(columnIndex));
              cursor.close();
          } else {
              mCurrentPhoto = null;
          }
          break;
      case REQUEST_IMAGE_CAPTURE:
          if (resultCode != Activity.RESULT_OK) {
              mCurrentPhoto = null;
          }
          break;
      }
      if (mCurrentPhoto != null) {
          ImageView imageView = (ImageView) [parent].findViewById(R.id.loaded_iv);
          Picasso.with(App.Instance).load(mCurrentPhoto).into(imageView);
      }
      super.onActivityResult(requestCode, resultCode, data);
      }
      

提交回复
热议问题