为什么在android中使用CATEGORY_OPENABLE

Vik*_*rma 3 android-intent

在这里,我已经编写了来自画廊的图像选择器的代码,但是谁能告诉我setAction()和的卷是什么addCategory()

意图类文件中有很多“静态最终字符串”可用,我完全不知道在我的程序中使用这些 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;
    }
  }
Run Code Online (Sandbox Code Playgroud)

小智 6

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

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