java - 使用 Android Intent 共享文件:文件扩展名已删除
问题描述
我正在使用以下代码与 Android Studio 3.3.2 和 Java 共享音频文件。该文件是从 /raw/ 文件夹中提取的。
public void funktionTeilen(String file) {
Uri uri = Uri.parse("android.resource://" + this.getPackageName() + "/raw/" + file);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("audio/mpeg3");
share.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(share, "Audio teilen"));
}
原则上共享工作正常,但文件在没有文件扩展名的情况下发送,这当然使大多数应用程序无法读取。如果我手动添加文件扩展名(例如从电子邮件客户端下载后),MP3 工作正常。
“文件”由另一个函数输入,对应于原始文件夹中的文件名。基本也找到了,不然分享过程根本就不行。
那么,如何在保留文件扩展名的情况下共享文件?谢谢你的帮助!
更新#1
public void funktionTeilen(String Datei) {
try {
File tmpFile = new File(this.getCacheDir() + "/tmpfile.mp3");
InputStream in = getResources().openRawResource(R.raw.meise1);
FileOutputStream out = new FileOutputStream(tmpFile, true);
byte[] buff = new byte[1024];
int read = 0;
try {
while ((read = in.read(buff)) > 0) {
out.write(buff, 0, read);
}
} finally {
in.close();
out.close();
}
// Uri uri = FileProvider.getUriForFile(this, this.getPackageName(), tmpFile);
Uri uri = Uri.fromFile(tmpFile);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("audio/*");
share.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(share, "Audio teilen"));
} catch (Exception e) {
Toast.makeText(MainActivity.this, e.toString(), Toast.LENGTH_LONG).show();
}
}
解决方案
我正在使用以下代码与 Android Studio 3.3.2 和 Java 共享音频文件
您正在共享资源。那是你的开发机器上的一个文件。它不是设备上的文件。
原则上共享工作正常,但文件在没有文件扩展名的情况下发送,这当然使大多数应用程序无法读取。
在 Android 中,当我们使用 Android SDK 处理资源时,资源没有文件扩展名。
那么,如何在保留文件扩展名的情况下共享文件?
如果您共享一个实际文件,使用FileProvider
,它将具有文件扩展名。因此,将与您的资源对应的字节复制到一个文件中(例如 in getCacheDir()
),然后设置FileProvider
并使用FileProvider.getUriForFile()
以获取Uri
与EXTRA_STREAM
.
推荐阅读
- jquery - 单击 jquery append 中的按钮时,它不起作用
- firefox - 是否有命令行标志来取消阻止Firefox中视频的自动播放?
- vb.net - 从 Panel 继承 - 我应该在哪里删除处理程序?
- opencv - 打开 CV,BUILD_CUDA_STUBS 构建标志
- angular - 如何在我的 Angular 应用程序中获取 Google Oauth 2.0 的刷新令牌?
- winforms - 行折叠/隐藏时调整 TableLayoutPanels 的大小
- java - 如何用全零表示 Java 中的效力?
- tensorflow - 在多标签图像分类任务中,哪种损失函数会收敛得很好?
- r - R: t-test for each pairwise combination of a grouping variable, done for every element in an ID variable
- javascript - 添加一些功能后 Javascript 无法正常工作