当前位置: 首页 > 面试题库 >

Android-如何从原始文件获取Uri?

凌和悦
2023-03-14
问题内容

我正在尝试Uri从文件raw夹中包含在项目中的原始文件获取。但是FileNotFoundException无论如何,我都会得到一个。

该文件是一个.wav文件,也尝试过使用.mp4,也不起作用。使用MediaPlayerDOES 播放两个文件都可以。

Uri回报:mark.dijkema.android.eindopdracht/2130968576

我的代码:

package mark.dijkema.android.eindopdracht;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.net.Uri;
import android.os.Bundle;

public class MainActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        PlayWaveFile();
    }

    private void PlayWaveFile()
    {
        // define the buffer size for audio track
        int minBufferSize = AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
        int bufferSize = 512;
        AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 8000, AudioFormat.CHANNEL_OUT_MONO,
            AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM);

        Uri url = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.usa_for_africa_we_are_the_world);
        File file = new File(url.toString());

        int count = 0;
        byte[] data = new byte[bufferSize];

        try {
            FileInputStream fileInputStream = new FileInputStream(file);
            DataInputStream dataInputStream = new DataInputStream(fileInputStream);
            audioTrack.play();

            while((count = dataInputStream.read(data, 0, bufferSize)) > -1)
            {
                audioTrack.write(data, 0, count);
            }

            audioTrack.stop();
            audioTrack.release();
            dataInputStream.close();
            fileInputStream.close();
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

错误:

java.io.FileNotFoundException: /mark.dijkema.android.eindopdracht/2130968576: open failed: ENOENT (No such file or directory)

问题答案:

尝试这种方法,getResources().openRawResource(ResourceID)用作您的inputStream。沿着这个地方:

//FileInputStream fileInputStream = new FileInputStream(file);
InputStream inputStream  = getResources().openRawResource(R.raw.usa_for_africa_we_are_the_world);
DataInputStream dataInputStream = new DataInputStream(inputStream);
audioTrack.play();

getResources().openRawResource(ResourceID) 返回一个InputStream

编辑:如果您使用上述方法,请删除这些代码

Uri url = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.usa_for_africa_we_are_the_world);
File file = new File(url.toString());

希望这有帮助,祝你好运!^^



 类似资料:
  • 我能够通过IMAP连接到Gmail并进行解析,但是在电子邮件正文中,我获得了Gmail特定的内容,例如

  • 我有一些pdf文件,使用pdfbox我已经将它们转换为文本并存储到文本文件中,现在我要从文本文件中删除它们 超链接 我希望按如下方式逐行获取有效文本: 我们提出了一种从纯文本中提取的多词概念词进行本体学习的方法OntoGain。OntoGain遵循一个由不同处理层定义的本体学习过程。在普通术语提取的基础上,通过对提取的概念进行聚类,形成概念层次结构。然后,衍生术语“分类法”将丰富非分类关系。已经研

  • 问题内容: 在我的应用程序中,我使用来显示一些日志信息。因为我想突出显示文本中的某些特定行(例如错误消息),所以将设置为“ ”。这样,我可以设置文本格式。 现在,我创建一个JButton,将其内容复制到剪贴板中。这部分很简单,但是我的问题是,当我调用时,我得到了HTML代码,例如: 而不是只获取原始内容: 有没有办法只获取纯文本格式的内容?还是我需要自己将HTML转换为原始文本? 问题答案: 基于

  • 问题内容: 我在相当基本的android开发水平上。 我想从诸如“ http://www.google.com”的页面获取文本。(我将使用的页面只有文本,因此没有图片或类似的东西)所以,要明确:我想将页面上的文本写入应用程序中的字符串等。 我尝试了这段代码,但是我什至不知道它是否能满足我的要求。 无论如何我都无法收到任何文字。我应该怎么做? 问题答案: 从您提供的示例代码中,您甚至没有读取请求的响

  • 假设我有一个像这样的endpoint。我想获取mp4文件,并将其原始数据插入到字符串中,以便计算整个文件内容的sha256。如何使用节点获取库执行此操作?我在互联网上找到的所有例子都假设从查询中返回一个json对象,是否总是这样,我应该使用另一个库?下面是一个示例代码: 我也没有在留档中找到任何关于函数和对象的内容。那么在这种情况下,达到文件数据的最简单方法是什么呢?提前感谢

  • 我一直在使用本教程对图片进行人脸检测。问题是当我获取java上使用的文件路径时 我怎么能在android Studio上翻译。我试着把我的lbpcascade_frontalface.xml放在原始资源上。Cascade分类器是opencv库提供的一个类。唯一的问题是他们只加载字符串路径(在xmlfile上)。这是我的代码。 我翻译成这样的方法。 我得到opencv的一个片段错误,它告诉我文件为空