目的是将文件从我的apk的原始文件夹复制到SD卡,以便随后可以使用Intent.createChooser将其传输到用户选择的应用程序。该文件将是res / raw文件夹中已存在的example.ogg文件。
我已经尝试了十几个由stackoverflow上的答案提供的变体但是无法正常工作...
这是一次有趣的尝试。
public void playSound1(View view) {
exampleSound.start();
if (cb.isChecked()){
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("audio/ogg");
share.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///android:asset/example.ogg"));
startActivity(Intent.createChooser(share, "Share Sound File"));
}
}
如果从选择器中选择文本选项,它只会告诉我文件类型不受支持。但是,如果我选择Gmail,它会打开Gmail应用并显示文件附件在那里但是当我将文件发送给自己时,它会干杯"无法附加文件"。
经过一番研究后,看起来棒棒糖的变化使得访问原始文件变得更加复杂。解决方法是将资源文件复制到SD卡,然后在关闭应用程序时删除该文件。关闭应用程序时删除文件的原因是您需要该文件存在,直到选择器应用程序完成它的传输。
这就是我所拥有的。
ActivityMain.java片段
public void playSound2(View view) throws IOException {
exampleSound.start();
InputStream in = getResources().openRawResource(R.raw.example1);
FileOutputStream out = new FileOutputStream(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS));
byte[] buff = new byte[1024];
int read = 0;
try {
while ((read = in.read(buff)) > 0) {
out.write(buff, 0, read);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
in.close();
out.close();
}
}
这是AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.anjosoft.demo">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我已通过插入exampleSound.start()进行测试;在每一行之后它会播放,直到我将它放在FileOutputStream之后。应用程序崩溃了。我怎么写SD卡?
答案 0 :(得分:0)
尝试在AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />