从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 ),但我需要打开图库。

任何帮助都会很棒。

谢谢

  • 导入3个SDK,得到错误:find3个版本的android-support-v4.jar
  • 在Android上使用ProGuard
  • MemoryFile在android中的用途是什么?
  • 即使在强行停止后,Google日历或Instagram如何使他们的应用程序始终正常运行
  • 如何在Android应用程序中使用现有数据库
  • 如何在android JellyBean 4.2.2中开发自定义状态栏
  • `opencv.android.JavaCameraView`和`opencv.android.NativeCameraView`有什么区别?
  • 在Android R18更新后,从调试视图打开源代码编辑.class
  • 我希望这能帮到您。 这段代码适合我。

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