这个方法起到的作用为什么是指定拍照的输出地址?这个方法的原型是
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;
}
}
}
这里不就指定了 图片的保存位置吗
putExtra 是用来传递参数的,我想作者是没有理解Intent 的真实用途
通过调用 intent.putExtra(String name, Parcelable value) 这个方法,是传递你要保存的图片的路径,打开相机后,点击拍照按钮,系统就会根据你提供的地址进行保存图片