我是android的新手,我正在研究如何从图库中检索图片,但是我对以下代码有一些疑问:
static final int REQUEST_IMAGE_GET = 1;
public void selectImage() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, REQUEST_IMAGE_GET);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) {
Bitmap thumbnail = data.getParcelable("data");
Uri fullPhotoUri = data.getData();
// Do work with photo saved at fullPhotoUri
...
}
}
在这一行:Bitmap thumbnail = data.getParcelable("data");
第一:“数据”密钥从何而来?
第二:为什么使用Parcelable,为什么不使用HasExtra("data")
第三步::将位图和URI一起使用的目的是什么?我知道要获取其位置的URI,但是如果有的话,它是位图。 URI的重要性如何,反之亦然
第四次: getParcelableExtra()
和getParcelable()
第五:我什么时候打onActivityResult
?
答案 0 :(得分:1)
所以这里有很多问题!!!
我知道让用户从图库中选择图像的最简单意图是:
public static final int GALLERY_REQUEST = 1001;
Intent galleryIntent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent , GALLERY_REQUEST );
,然后您可以通过这种方式获取用户选择的图像Uri:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == GALLERY_REQUEST && data != null && data.getData() != null){
//this is the uri of the image use it to load the image
Uri imageUri = intent.getData();
}
}
首先:“数据”密钥从何而来?
intent.getData()
是android提供的密钥,用于使用已选择的内容(图像,音乐和...)
第二:为什么使用Parcelable,为什么不使用HasExtra(“ data”)
Parcelable是android将对象从一个进程序列化到另一个进程的方式。基本上,当您调用意图并想要传递一些数据对象时,该对象必须实现Parcelebale接口。因此,在意图对象上,您可以检查意图是否具有带有对象键名并使用intent.hasExtra("keyname")
的其他对象方法。当您想从Intent中检索Parcelable对象时,可以简单地在Intent上使用getParcelableExtra("keyname")
,也可以使用getExtra()
获得该Intent的所有其他功能,它返回一个包,然后在该包上调用getParcelable("keyname")
获取相同的Parcelable对象
第三:将位图和URI一起使用的目的是什么?我知道URI可以获取其位置,但是如果有位图,.URI的重要性是什么,反之亦然
android不会只给您一个Uri位图。您将决定如何处理该Uri,或者从中加载位图或创建文件。
第五:我什么时候打电话给onActivityResult?
每当您开始一项活动(基本上使用startActivityForResult(intent)
)并期望从中获得一些结果时,即:调用gallery并且您希望Gallery活动返回一张图片,则必须实现onActivityResult
方法因此android可以调用它并为您提供请求的结果(如果有的话)
希望有帮助 快乐的编码