這個方法起到的作用為什麼是指定拍照的輸出位址?這個方法的原型是
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) 這個方法,是傳遞你要保存的圖片的路徑,打開相機後,點擊拍照按鈕,系統就會根據你提供的地址進行保存圖片