我正在平板电脑和手机上测试我们的应用程序,无论是运行ICS还是使用相同的Google帐户.如果我在其中一张照片上拍照,它会显示在另一台设备上(通过Picasa同步).奇怪的是,当我正常时,照片会显示在两个设备上
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);
Run Code Online (Sandbox Code Playgroud)
让用户从图库中选择图像.我的onActivityResult()看起来像这样:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != Activity.RESULT_OK) {
return; // user cancelled
}
Uri imageUri = data.getData();
if (imageUri == null) {
// (code to show error message goes here)
return;
}
// Get image path from media store
String[] filePathColumn = { android.provider.MediaStore.MediaColumns.DATA };
Cursor cursor = this.getContentResolver().query(imageUri, filePathColumn, null, null, null);
if(cursor == null || !cursor.moveToFirst()) {
// (code to show error message goes here)
return;
}
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String imagePath = cursor.getString(columnIndex);
cursor.close();
if (imagePath == null) {
// error happens here
}
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,直到imagePath为null结束.该代码适用于设备上的其他照片,但不适用于已同步的照片.添加一些日志记录代码之后,我们的一些用户看起来会发生这种情况,尽管很少(10,000张照片中不到1张).
我知道ACTION_GET_CONTENT具有仅显示本地文件的EXTRA_LOCAL_ONLY标志,但这仅适用于API版本11及更高版本.ACTION_GET_CONTENT也具有CATEGORY_OPENABLE,仅显示可以打开的数据.我的ACTION_PICK意图以某种方式(错误地?)显示实际上不是本地或可打开的照片吗?根据文档,使用INTERNAL_CONTENT_URI只能显示内部存储的照片.
或者我的onActivityResult()代码有什么问题吗?我见过很多不同的变化:
任何这些变化都能解决问题吗?
我通过使用 ContentResolver 直接从 Intent URI 打开 InputStream 来修复此问题:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == ACTIVITYRESULT_CHOOSEPICTURE) {
final InputStream ist = context.getContentResolver().openInputStream(intent.getData());
final Bitmap bitmap = BitmapFactory.decodeStream(ist);
ist.close();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3068 次 |
| 最近记录: |