Pra*_*eek 8 android android-intent
我在我的活动中有以下按钮,它打开图库以选择单个或多个图像,在此下方,OnActivityResult功能,即返回RESULT_CANCELLED多个图像的结果,以及RESULT_OK单个图像.不知道为什么会这样.有人可以请帮助.
buttonGallery.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent,"Select Picture"), choose_picture);
//startActivity(intent);
}
});
//OnActivityResult for the above
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == choose_picture) {
Uri imageUri = (Uri)data.getParcelableExtra(Intent.EXTRA_STREAM);
//Do something
}
Run Code Online (Sandbox Code Playgroud)
我得到data.getData()的null,data.getExtras()如null.
有人可以指导我如何从上面的代码中获得所需的结果.我想要URIs用户从图库中选择的所有图像.
PS:它对单个图像工作正常,不知道为什么.
Pra*_*eek 19
最后我得到了解决方案.使用时EXTRA_ALLOW_MULTIPLE,如果用户选择的内容不止一个,而不是返回intent.getExtra(),则返回意图中的数据ClipData,仅支持SDK版本18及更高版本.从那里,可以使用以下代码检索数据 - >
if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
&& (null == data.getData()))
{
ClipData clipdata = data.getClipData();
for (int i=0; i<clipdata.getItemCount();i++)
{
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), clipdata.getItemAt(i).getUri());
//DO something
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经进行了空检查,intent.getData()因为在单个图像的情况下,数据被接收intent.getData(),而在多个选择的情况下,这被接收为null.
因此,对于低于18的sdk版本和单选(不考虑sdk版本),可以通过以下方式简单地检索数据:
InputStream ist = this.getContentResolver()
.openInputStream(data.getData());
Bitmap bitmap = BitmapFactory.decodeStream(ist);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4109 次 |
| 最近记录: |