我正在编写一个音板应用程序,该应用程序从 res/raw 文件夹中获取文件并将它们放在一个 gridview 中,每个按钮都有一个按钮。如果我再按一个按钮,我可以得到一个菜单,我可以从中共享音频文件,但是,当我尝试通过 WhatsApp 发送它时,我得到一个没有扩展名的未命名文件。当我在文件管理器中查找时,我找到了一个名为“DOC-20190722-WA0000”的文件。(注意没有扩展名的点)如果我重命名它添加 mp3 扩展名,它可以毫无问题地播放。我宁愿直接发送文件,而不是将文件保存到 sdcard 并共享它。
代码改编自这个答案,但是,正如我之前所说,它只能部分工作
在我的代码中,我最初获取原始文件夹中的文件列表:
Field[] raw = R.raw.class.getFields();
然后我在一个适配器中创建一组按钮,这些按钮与原始文件的名称相同,并以与“字段”数组中的文件相同的顺序进行索引。当我长按一个按钮时,我得到按钮的 id 并将其保存在一个变量中:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
selectedButton = v;
getMenuInflater().inflate(R.menu.button_menu,menu);
}
最后,我得到了按钮的 id,从中我得到了“raw”中 mp3 文件的 id,并将其放入共享意图中:
@Override
public boolean onContextItemSelected(MenuItem item) {
int position = selectedButton.getId();
switch (item.getItemId()){
case R.id.share:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("android.resource://"+getApplicationContext().getPackageName()+"/raw/"+raw[position].getName()));
shareIntent.setType("audio/mp3");
startActivity(Intent.createChooser(shareIntent,"Condividi con"));
return true;
...
default:
return super.onContextItemSelected(item);
}
}
理论上,它应该以其原始名称发送它,但事实并非如此,所以我正在寻找一种手动设置名称的方法。