从Android Intent打开图库应用程序

我正在寻找一种从意图中打开Android图库应用程序的方法。

我不想返回图片,而只是打开图库以允许用户使用它,就像他们从启动器中选择它一样( View pictures/folders )。

我试图做以下事情:

 Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_GET_CONTENT); intent.setType("image/*"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

但是,这会导致应用程序在我选择图片后关闭(我知道这是因为ACTION_GET_CONTENT ),但我需要打开图库。

任何帮助都会很棒。

谢谢

Solutions Collecting From Web of "从Android Intent打开图库应用程序"

我希望这能帮到您。 这段代码适合我。

 Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, RESULT_LOAD_IMAGE); 

ResultCode用于将所选图像更新为图库视图

 if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); if (cursor == null || cursor.getCount() < 1) { return; // no cursor or no record. DO YOUR ERROR HANDLING } cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); if(columnIndex < 0) // no column index return; // DO YOUR ERROR HANDLING String picturePath = cursor.getString(columnIndex); cursor.close(); // close cursor photo = decodeFilePath(picturePath.toString()); List bitmap = new ArrayList(); bitmap.add(photo); ImageAdapter imageAdapter = new ImageAdapter( AddIncidentScreen.this, bitmap); imageAdapter.notifyDataSetChanged(); newTagImage.setAdapter(imageAdapter); } 

这就是你需要的:

 ACTION_VIEW 

将您的代码更改为:

 Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setType("image/*"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

您可以使用以下意图打开图库:

 public static final int RESULT_GALLERY = 0; Intent galleryIntent = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(galleryIntent , RESULT_GALLERY ); 

如果你想获得结果URI或做任何其他事情,请使用:

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case QuestionEntryView.RESULT_GALLERY : if (null != data) { imageUri = data.getData(); //Do whatever that you desire here. or leave this blank } break; default: break; } } 

在Android 4.0+上测试过

  1. 以下内容可用于Activity或Fragment。

      private File mCurrentPhoto; 
  2. 添加权限

       
  3. 添加意图打开“图像选择器”和“照片捕捉”

     //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. 获取照片时添加处理。

     @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); } 

由于您不希望返回结果,请尝试使用简单的代码。

 Intent i=new Intent(Intent.ACTION_PICK); i.setType("image/*"); startActivity(i); 

如果有人仍然收到错误,即使添加以下代码后

 Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);