搜尋

首頁  >  問答  >  主體

android - 關於方法intent.putExtra(MediaStore.EXTRA_OUTPUT, uri)的問題

這個方法起到的作用為什麼是指定拍照的輸出位址?這個方法的原型是

public Intent putExtra(String name, Parcelable value)

這個意思不是將資料以鍵值對的形式儲存嗎?為什麼可以指定圖片的輸出位址呢?
下面是完整的程式碼,主要目的就是點擊Button進入拍照的介面,然後將拍照得到的圖片儲存到應用程式關聯目錄下,但是學習過程中我沒弄清楚如何將圖片儲存到我指定的uri下。

public class MainActivity extends AppCompatActivity
{

    public static final int TAKE_PHOTO = 1;
    private ImageView picture;
    private Uri imageUri;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button takePhoto= (Button) findViewById(R.id.take_photo);
        picture= (ImageView) findViewById(R.id.pircture);
        takePhoto.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //创建File对象,用于存储拍照后的图片
                File outputImage = new File(getExternalCacheDir(),"output_image.jpg");
                if(outputImage.exists())
                {
                    outputImage.delete();
                    try
                    {
                        outputImage.createNewFile();
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                }

                if (Build.VERSION.SDK_INT>=24)
                {
                    imageUri = FileProvider.getUriForFile(MainActivity.this,"com.studio.cameraalbumtest.fileprovider",outputImage);
                }
                else
                {
                    imageUri = Uri.fromFile(outputImage);
                }

                //启动相机程序
                Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");
                intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
                startActivityForResult(intent,TAKE_PHOTO);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        switch (requestCode)
        {
            case TAKE_PHOTO:
            {
                if(resultCode == RESULT_OK)
                {
                    //将拍摄的照片显示出来
                    try
                    {
                        Bitmap bitmap= BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
                        picture.setImageBitmap(bitmap);
                    }
                    catch (FileNotFoundException e)
                    {
                        e.printStackTrace();
                    }
                }
            }
            break;
        }
    }
}
过去多啦不再A梦过去多啦不再A梦2779 天前1105

全部回覆(2)我來回復

  • 習慣沉默

    習慣沉默2017-05-16 13:34:33

    if (Build.VERSION.SDK_INT>=24)
                    {
                        imageUri = FileProvider.getUriForFile(MainActivity.this,"com.studio.cameraalbumtest.fileprovider",outputImage);
                    }
                    else
                    {
                        imageUri = Uri.fromFile(outputImage);
                    }

    這裡不就指定了 圖片的保存位置嗎

    回覆
    0
  • 巴扎黑

    巴扎黑2017-05-16 13:34:33

    putExtra 是用來傳遞參數的,我想作者是沒有理解Intent 的真實用途

    透過呼叫 intent.putExtra(String name, Parcelable value) 這個方法,是傳遞你要保存的圖片的路徑,打開相機後,點擊拍照按鈕,系統就會根據你提供的地址進行保存圖片

    回覆
    0
  • 取消回覆