gpt4 book ai didi

android-intent - 带有 MediaStore.Images.Media.INTERNAL_CONTENT_URI 的 ACTION_PICK 允许用户选择通过 picasa 同步的图像(不在设备上?)

转载 作者:行者123 更新时间:2023-12-04 06:46:13 24 4
gpt4 key购买 nike

我正在运行 ICS 并使用相同 Google 帐户的平板电脑和手机上测试我们的应用程序。如果我在一个设备上拍照,它会显示在另一台设备上(通过 Picasa 同步)。奇怪的是,当我做正常的时候,照片会出现在两个设备上

Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);

让用户从图库中选择图像。我的 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
}
}

当 imagePath 为空时,一切都很好,直到结束。该代码适用于设备上的其他照片,但不适用于同步的照片。添加一些日志记录代码后,我们的一些生产用户似乎正在发生这种情况,尽管很少(不到 10,000 张照片中的 1 张)。

我知道 ACTION_GET_CONTENT 具有 EXTRA_LOCAL_ONLY 标志以仅显示本地文件,但这仅适用于 API 版本 11 及更高版本。 ACTION_GET_CONTENT 也有 CATEGORY_OPENABLE 只显示可以打开的数据。我的 ACTION_PICK 意图是否以某种方式(错误地?)显示了实际上不是本地或可打开的照片?根据文档,使用 INTERNAL_CONTENT_URI 只能显示内部存储的照片。

或者我的 onActivityResult() 代码有问题吗?我已经看到了大量不同的变化:
  • 检查以确保 data.getData().getPath() 不为空
  • 使用 MediaStore.Images.Media.DATA 作为投影而不是 MediaStore.MediaColumns.DATA
  • 使用 MediaStore.Images.ImageColumns.DATA 作为投影而不是 MediaStore.MediaColumns.DATA
  • 使用 managedQuery() 来获取 Cursor 而不是 getContentResolver().query()
  • 使用 CursorLoader 获取 Cursor (API 11+)
  • 使用 getColumnIndexOrThrow() 而不是 getColumnIndex()
  • 调用 cursor.getColumnIndex(MediaStore.Images.Media.DATA) 然后调用 cursor.moveToFirst()
  • 使用“userImage”作为列名(getColumnIndex() 的参数)

  • 这些更改中的任何一个都可以解决问题吗?

    最佳答案

    我有 similar problem described here .

    我通过使用 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();
    }
    }

    关于android-intent - 带有 MediaStore.Images.Media.INTERNAL_CONTENT_URI 的 ACTION_PICK 允许用户选择通过 picasa 同步的图像(不在设备上?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12078870/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com