android raw获取uri_Android-如何从原始文件获取Uri?

在Android应用中,开发者尝试从raw资源目录加载.wav或.mp4文件到AudioTrack进行播放,但遇到了FileNotFoundException。尽管MediaPlayer可以成功播放这些文件,AudioTrack在尝试读取文件时却无法找到文件。错误提示表明文件路径不正确,可能是URI构造方式有误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在尝试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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值