【问题标题】:How to get an uri from a raw resource如何从原始资源中获取 uri
【发布时间】:2018-01-25 02:36:06
【问题描述】:

我的原始文件夹中有一个 .txt 文件。我想获取文件的 uri 并创建一个新文件以上传到 firebase。

想法很简单

  1. 从我的 res/raw 资源中获取 txt 文件
  2. 将其上传到 Firebase 存储

我已经做到了

 String path = "android.resource://" + getPackageName() + "/" + "raw/grupos.txt";

 Uri file = Uri.fromFile(new File(path));

但是当我打电话时

riversRef.putFile(file)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {....

说文件无效

LOGCAT

java.io.FileNotFoundException: /android.resource:/com.example.usuario.ottasubirarchivos/raw/grupos.txt: 打开失败:ENOENT(没有这样的文件或目录)

我不知道我是否需要获取资源文件的路径,在内部存储中创建一个新文件,获取该文件并将其上传到 firebase,或者使用流...我不知道如何处理这个...谢谢

【问题讨论】:

  • 字符串路径 = "android.resource://" + getPackageName() + "/" + ".txt" + "raw/grupos.txt";
  • 类似的东西?
  • 我试过了还是不行
  • Uri.fromFile() 仅适用于文件系统路径。使用Uri.parse() 解析已经是Uri 的内容。

标签: android firebase firebase-storage


【解决方案1】:

你有这个工作吗?
我可以通过这种方式访问​​原始资源:Android.Net.Uri.Parse("android.resource://" + ApplicationContext.PackageName + "/" + Resource.Raw.beep)
文件beep.ogg 位于Resources/raw 目录下。我在这里注意到的是:RawResource 中的大写字母而不是 ResourceS 以及我路径中的无扩展名文件名。正如 cmets 中的 CommonsWare 所指出的,您没有文件,但它的 Uri 所以直接解析它

【讨论】:

    【解决方案2】:

    你可以用这个:

    public class UriUtils {
    
        public static Uri getUriToResource(@NonNull Context context, @AnyRes int resId) throws Resources.NotFoundException {
            Resources res = context.getResources();
    
            Uri resUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE +
                    "://" + res.getResourcePackageName(resId)
                    + '/' + res.getResourceTypeName(resId)
                    + '/' + res.getResourceEntryName(resId));
            return resUri;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 2011-06-21
      相关资源
      最近更新 更多