如何从 android 中的图库中检索图片?
How to retrieve a picture from gallery in android?
我是 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");
第一:"data"密钥从何而来?
其二:为什么要用Parcelable,为什么不用HasExtra("data")
第三:位图和URI放在一起有什么用?我理解 URI 来获取它的位置,但如果我有它的位图。 URI 的重要性是什么,反之亦然
四:getParcelableExtra()
和getParcelable()
有什么区别
第五:我什么时候打电话给onActivityResult
?
所以这里有很多问题!!!
我知道让用户从图库中选择图像的最简单 Intent 是:
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();
}
}
First: where did "data" key come from?
intent.getData()
是 android 提供的密钥,用于使用已选择的内容(图像、音乐和...)
Second: why using Parcelable ,why not using HasExtra("data")
Parcelable 是 android 将对象从一个进程序列化到另一个进程的方式。基本上,当你调用一个意图并想传递一些数据对象时,该对象必须在一个意图对象上实现 Parcelebale interface.so 你可以检查意图是否有一个带有对象键名的额外对象并使用 intent.hasExtra("keyname")
方法。当你想从 Intent 中检索 Parcelable 对象时,你可以简单地在意图上使用 getParcelableExtra("keyname")
或者你可以使用 getExtra()
获得该意图的所有额外内容,其中 return 是一个包,然后在bundle 你可以调用 getParcelable("keyname")
来获得相同的 Parcelable 对象
Third: what is the purpose of having a bitmap and a URI together? i understand the URI to get its location,but if i have it's bitmap ..whats the importance of the URI and vice versa
android 不会只给你一个 Uri 位图。您将决定如何处理该 Uri,从中加载位图或创建文件。
Fifth: when do i call onActivityResult?
当你启动一个 activity(基本上使用 startActivityForResult(intent)
)并期望从中得到一些结果时,即:调用画廊并且你想要画廊 activity 到 return你是一张图片,你必须实现 onActivityResult
方法以便 android 可以调用它并为你提供请求的结果(如果有的话)
希望对您有所帮助
快乐编码
我是 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");
第一:"data"密钥从何而来?
其二:为什么要用Parcelable,为什么不用HasExtra("data")
第三:位图和URI放在一起有什么用?我理解 URI 来获取它的位置,但如果我有它的位图。 URI 的重要性是什么,反之亦然
四:getParcelableExtra()
和getParcelable()
有什么区别
第五:我什么时候打电话给onActivityResult
?
所以这里有很多问题!!!
我知道让用户从图库中选择图像的最简单 Intent 是:
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();
}
}
First: where did "data" key come from?
intent.getData()
是 android 提供的密钥,用于使用已选择的内容(图像、音乐和...)
Second: why using Parcelable ,why not using HasExtra("data")
Parcelable 是 android 将对象从一个进程序列化到另一个进程的方式。基本上,当你调用一个意图并想传递一些数据对象时,该对象必须在一个意图对象上实现 Parcelebale interface.so 你可以检查意图是否有一个带有对象键名的额外对象并使用 intent.hasExtra("keyname")
方法。当你想从 Intent 中检索 Parcelable 对象时,你可以简单地在意图上使用 getParcelableExtra("keyname")
或者你可以使用 getExtra()
获得该意图的所有额外内容,其中 return 是一个包,然后在bundle 你可以调用 getParcelable("keyname")
来获得相同的 Parcelable 对象
Third: what is the purpose of having a bitmap and a URI together? i understand the URI to get its location,but if i have it's bitmap ..whats the importance of the URI and vice versa
android 不会只给你一个 Uri 位图。您将决定如何处理该 Uri,从中加载位图或创建文件。
Fifth: when do i call onActivityResult?
当你启动一个 activity(基本上使用 startActivityForResult(intent)
)并期望从中得到一些结果时,即:调用画廊并且你想要画廊 activity 到 return你是一张图片,你必须实现 onActivityResult
方法以便 android 可以调用它并为你提供请求的结果(如果有的话)
希望对您有所帮助 快乐编码