我试图保存音频文件以将其发送到whatsapp,但我无法将其保存在外部存储设备上。我不知道我在哪里犯错误。
我正在使用此代码:
FileOutputStream outputStream;
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES), "FUNG");
if (!file.mkdirs()) {}
try {
outputStream = new FileOutputStream(file);
outputStream.write(R.raw.badum2);
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Intent shareIntent = new Intent(Intent.ACTION_SEND);
Uri uri = Uri.parse(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES) + "/FUNG/badum2.m4a");
shareIntent.setType("audio/m4a");
shareIntent.setPackage("com.whatsapp");
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(shareIntent);
当文件发送到WhatsApp时,它显示如下错误:
"无法分享,请再试一次"
我没有在目录中看到音频文件,所以我猜错误是我在外部存储上保存音频文件时遇到了一些错误。
请帮我解决这个问题。
答案 0 :(得分:1)
我看到了多个问题:
(1)if (!file.mkdirs()) {}
在文件路径创建目录,稍后您使用该目录打开输出流,这当然不起作用。
解决方案:
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES), "FUNG/badum2.m4a"); // assumed target file
if (!file.getParentFile().mkdirs() && !file.getParentFile().isDirectory()) {
// Abort! Directory could not be created!
}
(2)outputStream.write(R.raw.badum2);
将写入引用的int值
对你的资源,而不是资源本身。
解决方案:
使用InputStream in = ctx.getResources().openRawResource(R.raw.badum2);
其中ctx是一个Context实例(例如您的Activity)并将其内容写入该文件。
try {
outputStream = new FileOutputStream(file);
try {
InputStream in = ctx.getResources().openRawResource(R.raw.badum2);
byte[] buffer = new byte[4096];
int read;
while ((read = in.read(buffer, 0, buffer.length) >= 0) {
outputStream.write(buffer, 0, read);
}
in.close();
} catch (IOException ex) {
ex.printStackTrace();
}
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}