2017-09-11 3 views
1

ここではギャラリーから画像ピッカーのコードを書いていますが、 はsetAction()addCategory()のロールが何であるか教えてください。なぜandroidでCATEGORY_OPENABLEが使用されますか

テントクラスファイルで利用可能な「静的最終文字列」たくさんの、 私はこれらのアクションを使用しての完全に気付いていないですし、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

Intent.setAction私のプログラムでありますが、どのようなのを決定するために使用されますあなたが意図しているアプリケーションにして欲しいのですか?あなたの場合、いくつかのデータ、具体的にはイメージを取得する必要があります。だから、setAction()を使って引数をACTION_GET_CONTENTとすれば、Androidにこれを言うことができます。たとえば、イメージを受信するのではなく、イメージを送信する場合は、ACTION_SENDACTION_SENDTOまたはACTION_SEND_MULTIPLEになります。 Intent.ACTIONは、目的に応じてインテントレシーブアプリが行うことができる機能またはアクションを指定する機会を与えるだけです。

Intent.CATEGORYは、あなたの意図に追加できる別の仕様です。あなたのケースでは、OPENABLEは、受け取るデータをFileオブジェクトとして開くことができます。つまり、読み取りと書き込みの権限を持ち、データの物理的な場所(あなたの場合は画像ファイル)に完全にアクセスできます。これは、事前に保管許可を要求する必要があることを意味することを銘記してください。このカテゴリでは、あなたの有価証券を引き上げることになります。画像を表示するだけで、画像ファイルを物理的に操作する必要がない場合は、このカテゴリを使用しないでください。イメージを操作してそれを別々に保存する場合は、イメージの別のコピーを作成し、Androidで提供された独自のExternalStorageでそのコピーを操作することを検討してください。

関連する問題