为什么CATEGORY_OPENABLE用于android

时间:2017-09-11 05:47:14

标签: android-intent

我在这里编写了图库选择器的代码,但是 任何人都可以告诉我setAction()addCategory()的滚动是什么?

Intent Class文件中有很多“静态最终字符串”, 我完全不知道在我的程序中使用这些ACTION和CATEGORY参数

public class ImagePicker extends BaseActivity implements View.OnClickListener {

  private final int PICK_FROM_GALLERY_REQUEST = 1;
  private ImageView pickedImage;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.onStart();
    setContentView(R.layout.activity_image_picker);
    pickedImage= (ImageView) findViewById(R.id.image);
    Button cameraButton= (Button) findViewById(R.id.pick_from_camera);
    Button galleryButton= (Button) findViewById(R.id.pick_from_gallery);
    cameraButton.setOnClickListener(this);
    galleryButton.setOnClickListener(this);
    setViewHeight(pickedImage);
  }

  private void setViewHeight(ImageView pickedImage) {
    DisplayMetrics displayMetrics=getResources().getDisplayMetrics();
    pickedImage.getLayoutParams().height=displayMetrics.heightPixels/2;
  }


  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==PICK_FROM_GALLERY_REQUEST && resultCode==RESULT_OK && data!=null){
        InputStream stream = null;
        try {
            stream = getContentResolver().openInputStream(
                    data.getData());
            Bitmap bitmap = BitmapFactory.decodeStream(stream);
            stream.close();
            pickedImage.setImageBitmap(bitmap);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  }

  @Override
  public void onClick(View v) {
    switch (v.getId()){
        case R.id.pick_from_gallery:
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            startActivityForResult(intent, PICK_FROM_GALLERY_REQUEST);
            break;
        case R.id.pick_from_camera:

            break;
    }
  }

1 个答案:

答案 0 :(得分:2)

Intent.setAction用于确定您希望意向接收应用程序执行哪种操作。在您的情况下,您想获得一些数据,特别是图像;因此,您可以使用setAction()并将参数作为ACTION_GET_CONTENT传递给Android。例如,如果您想发送图片而不是接收图片,那么您将通过ACTION_SENDACTION_SENDTOACTION_SEND_MULTIPLEIntent.ACTION只是让您有机会根据需要指定意向接收应用必须能够执行的功能或操作。

Intent.CATEGORY是您可以添加到意图中的另一个规范。在您的情况下,OPENABLE表示您要接收的数据可以作为File对象打开,即具有读取和写入权限,并且可以完全访问数据的物理位置(在您的情况下是图像)文件)。记住这意味着您需要事先请求存储权限,此类别将导致您的证券加薪。如果您只需要显示图像而不需要物理操作图像文件,请勿使用此类别。如果您想操作图像并将其存储,请单独考虑制作图像的单独副本,并在Android提供的您自己的ExternalStorage中操作该副本。