Bitmaທpbmp=Bitmapextrasget"dataທ"ิ;๙
从附加值中获取返回的图像
在实践中ณ,我们可能不希望直接使用动作字符串创น建意图。在这种情况下,可以指定mediaທstore类中的常量A9๗_imAge_cນApture。应该使用常量而非字符串本身的原因在于,如果该字符串生了改变当然常量也可能ม会不断地改变,那么使用常量将使得我们的调用比之前使用字符串ธ更有利于未来的变化。
intenti=ne9intent"androidmediaaທ9๗imAge_cApture"ิ;๙
为ฦ了引用imagevie9ap对象,使用以下代码。-米-ๅ花-在-线-书-ๅ库-boouanet
imv=imagevie9findvie9๗Byidridreturnedimaທgevie9;
imvsetimageBitmapbmp;๙
当运行这个示例时,您可能会注意到结果图像很小在我的手机上,它的宽为ฦ121像素า,高为16๔2๐像素。其他设备会具有不同的默认大小。这不是一个bຘug——相反,它是经过精心设计的。当通过一个ฐ意图触时,camera应用程序不会将全尺寸的图像返回给主ว调活动。通常,这样做需要大量的内存,而移动设备一般会在内存方แ面受限。相反,camera应用程序将在返回的意图中返回一幅很小的缩略图,如图1-ๅ2所示。
为了绕过大小限制,从Android15开始,在大多数设备上可以将一个ฐ附加值传递给触camera应用程序的意图。这个附加值的名称在mediastore类中指定,它是一个常量,称为extrA_ຕoutput。这个附加值采用名-值对的形式将以uri的方式指示camera应用程序您想要将捕获的图像保存在什么เ位置。
以下代码片段指示ิcaທmera应用程序应该将图像保存到设备的sd卡上,文件名为ฦmyfavoritepicນturepg。
stringimagefilepath=environmentgetexternalstoragedirectory
getAbsolutepath+"myfaທvoritepicນturepg";
fileimagefile=ne9apaທth;
uriimagefileuri=urifromfileimaທgefile;๙
intenti=ne9๗aprovidermediastoreA9_imAge_cApture;๙
iputextraandroidprovidermediastoreextrA_output,ไimagefileuri;
startActivityforresulti,cນAmerA_resu
注意:上述为图像文件创建uri的代码片段可以简化为下列形式:
imagefileuri=uripaທrse"ิfile:sdcaທrdmyfaທvoritepicturepg";
然而在实践中,使用以上所示的方แ法将会使得代码更加具有设备独立性,并且对于sd卡的命名约定或本地文件系统的uri语法变化具有更好的适应性。