【问题标题】:Unable to fetch file path from uri in Android M无法从 Android M 中的 uri 获取文件路径
【发布时间】:2016-04-22 14:10:26
【问题描述】:

我能够从通知栏获取的 URI 中获取文件路径,但我只能从从 Android Snackbar 接收到的 URI 中获取文件路径。

用于获取路径的当前函数:

注意:这适用于 Marshmallow 之前的 Android 版本。

private String extractContentUri(Uri uri) {

  Cursor cursor = null;

  try {

    cursor = getContentResolver().query(uri, null, null, null, null);
    Log.d("CHECK", "COUNT" + cursor.getCount());

    if (cursor != null && cursor.moveToFirst()) {
      Log.d("CHECK", "CURSOR !NULL");
      launchedFile = cursor.getString(cursor.getColumnIndexOrThrow("_data"));
      Log.d("CHECK", "==" + launchedFile);
      return launchedFile;
    }
  } catch (IllegalArgumentException e) {

  } finally {
    Log.d("CHECK", "{finally} ==" + launchedFile);
    if (cursor != null) {
      cursor.close();
      cursor = null;
    }

  }
  return null;
}

在android M中,访问from通知栏和snackbar时获得的URI是不同的。

  • 来自通知栏的URI:content://downloads/all_downloads/1449
  • 来自小吃店的 URI:content://downloads/my_downloads/1449
cursor = getContentResolver().query(uri, null, null, null, null);

这里的 cursor.getCount() 总是 0 用于小吃吧。

【问题讨论】:

  • @Alqueraf:添加了代码 sn-p

标签: android android-6.0-marshmallow android-snackbar snackbar android-6.0.1-marshmallow


【解决方案1】:

您需要为Android 6 及以上版本添加运行时权限。运行时权限请查看this。

【讨论】:

  • 如果是这种情况,那么它也不应该在通知栏中工作,对吧?
  • 如果是这样的话
  • 但我能够从通知栏处理它。此外,在 android M 中,从通知栏和小吃栏访问时获得的 uri 是不同的。来自通知栏的 uri:content://downloads/all_downloads/1449 来自快餐栏的 uri:content://downloads/my_downloads/1449 cursor = getContentResolver().query(uri, null, null, null, null);这里的 cursor.getCount() 总是 0 用于小吃吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2011-03-01
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多