我的共享选项有问题。 该选项工作得很好(我在尝试进行一些修改之前已保存了它),但是我尝试进行某些修改,但无法达到目标。
目的是:单击菜单中的选项,单击共享,如果“ MUSIC”文件夹中不存在“测试文件夹”文件夹,则创建它,如果已经存在,则复制声音,放入将其放在先前创建的文件夹中,然后将其用作SEND目的中的额外内容。
case R.id.share:
if (isStoragePermissionGranted()) {
File outputFile = new File("");
InputStream is = getResources().openRawResource(((Sound) adapter.getItem(index)).getMpsound());
try {
File outputDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC), "Test folder");
outputFile = new File(outputDir, getResources().getResourceEntryName(((Sound) adapter.getItem(index)).getMpsound()) + ".mp3");
if (outputDir.exists()) {
byte[] buffer = new byte[is.available()];
is.read(buffer);
OutputStream os = new FileOutputStream(outputFile);
os.write(buffer);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("audio/*");
share.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".provider", outputFile));
share.putExtra(Intent.EXTRA_TEXT, "\"" + ((Sound) adapter.getItem(index)).getTitle_show() + "\" shared by my app");
startActivity(Intent.createChooser(share, "Share Sound File"));
} else {
outputDir.createNewFile(); //plus add code as below to share the sound after creating the folder
}
} catch (IOException e) {
e.printStackTrace();
}
}
我无法创建该文件夹,如果我手动创建该文件夹,则代码运行良好,因为mp3出现在该文件夹中,并且在出现错误提示后:
java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Music/my app/sound_test.mp3
所以...该应用程序能够访问该文件夹以创建声音,但是由于未知原因,我遇到了这个问题。
我做错了什么?
答案 0 :(得分:0)
因此,对于几天,几个月,几年内遇到相同问题的人:
正如CommonsWare所说,访问文件夹的问题来自FileProvider
。用正确的路径正确配置它之后,我再也没有问题了。
对于与创建新文件夹有关的部分,.createNewFile()
似乎不是正确的方法。必须使用.mkdir()
最后,有关删除文件夹中文件的部分,您将在那里找到答案:
File dir = new File(Environment.getExternalStorageDirectory()+"Dir_name_here");
if (dir.isDirectory())
{
String[] children = dir.list();
for (int i = 0; i < children.length; i++)
{
new File(dir, children[i]).delete();
}
}
来源:How to delete all files in a directory java android app? Current code is deleting the that folder