如何从原始资源获取uri

时间:2017-08-16 20:13:14

标签: android firebase firebase-storage

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

这个想法很简单

  1. 从我的资源/原始资源中获取txt文件
  2. 将其上传到firebase存储
  3. 我已经完成了这个

     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,或者使用流...我不知道如何处理...谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用此:

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;
    }
}

答案 1 :(得分:0)

您有这项工作吗?
我可以这样访问原始资源:Android.Net.Uri.Parse("android.resource://" + ApplicationContext.PackageName + "/" + Resource.Raw.beep)
文件beep.ogg位于Resources/raw目录下。我在这里注意到的是:RawResource中的大写字母,而不是Resource S中的大写字母,以及路径中的无扩展名文件名。正如CommonsWare在评论中指出的那样,您没有文件,但文件Uri可以直接对其进行解析