0

我正在编写一个音板应用程序,该应用程序从 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);
    }
}

理论上,它应该以其原始名称发送它,但事实并非如此,所以我正在寻找一种手动设置名称的方法。

4

0 回答 0