gpt4 book ai didi

android - 媒体播放器android中的SetDataSource

转载 作者:行者123 更新时间:2023-11-29 15:21:37 27 4
gpt4 key购买 nike

我有一个类是媒体播放器。我使用 mp.setDataSource(path); 从 sdcard 获取文件。但是有了这个解决方案,我得到了错误。我怎样才能改变设置数据的方式让我的播放器工作?我正在阅读有关 FileDescriptor 的内容。如何更改我的路径以使用 FileDescriptor?

这是错误:

07-16 15:42:00.827: W/System.err(616): java.io.IOException: setDataSourceFD failed.: status=0x80000000
07-16 15:42:00.827: W/System.err(616): at android.media.MediaPlayer.setDataSource(Native Method)
07-16 15:42:00.827: W/System.err(616): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:976)
07-16 15:42:00.827: W/System.err(616): at VoiceRecorder$7.onClick(VoiceRecorder.java:306)
07-16 15:42:00.827: W/System.err(616): at android.view.View.performClick(View.java:4202)
07-16 15:42:00.827: W/System.err(616): at android.view.View$PerformClick.run(View.java:17341)
07-16 15:42:00.827: W/System.err(616): at android.os.Handler.handleCallback(Handler.java:725)
07-16 15:42:00.827: W/System.err(616): at android.os.Handler.dispatchMessage(Handler.java:92)
07-16 15:42:00.827: W/System.err(616): at android.os.Looper.loop(Looper.java:137)
07-16 15:42:00.827: W/System.err(616): at android.app.ActivityThread.main(ActivityThread.java:5039)
07-16 15:42:00.827: W/System.err(616): at java.lang.reflect.Method.invokeNative(Native Method)
07-16 15:42:00.827: W/System.err(616): at java.lang.reflect.Method.invoke(Method.java:511)
07-16 15:42:00.827: W/System.err(616): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-16 15:42:00.837: W/System.err(616): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-16 15:42:00.837: W/System.err(616): at dalvik.system.NativeStart.main(Native Method)
07-16 15:42:00.857: W/MessageQueue(616): Handler (android.media.MediaRecorder$EventHandler) {416bcf68} sending message to a Handler on a dead thread
07-16 15:42:00.857: W/MessageQueue(616): java.lang.RuntimeException: Handler (android.media.MediaRecorder$EventHandler) {416bcf68} sending message to a Handler on a dead thread
07-16 15:42:00.857: W/MessageQueue(616): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:294)
07-16 15:42:00.857: W/MessageQueue(616): at android.os.Handler.enqueueMessage(Handler.java:618)
07-16 15:42:00.857: W/MessageQueue(616): at android.os.Handler.sendMessageAtTime(Handler.java:587)
07-16 15:42:00.857: W/MessageQueue(616): at android.os.Handler.sendMessageDelayed(Handler.java:558)
07-16 15:42:00.857: W/MessageQueue(616): at android.os.Handler.sendMessage(Handler.java:495)
07-16 15:42:00.857: W/MessageQueue(616): at android.media.MediaRecorder.postEventFromNative(MediaRecorder.java:977)
07-16 15:42:00.857: W/MessageQueue(616): at dalvik.system.NativeStart.run(Native Method)

最佳答案

例子:

try {
FileDescriptor fd = null;

if (isInInternalMemory(audioFilename)) {
int audioResourceId = mContext.getResources().getIdentifier(audioFilename, "raw", "com.ampirik.audio");
AssetFileDescriptor afd = mContext.getResources().openRawResourceFd(audioResourceId);
fd = afd.getFileDescriptor();
} else if (isInSdCard(audioFilename)) {
File baseDir = Environment.getExternalStorageDirectory();
String audioPath = baseDir.getAbsolutePath() + audioFilename + ".mp3";
FileInputStream fis = new FileInputStream(audioPath);
fd = fis.getFD();
}

if (fd != null) {
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(fd);
mediaPlayer.prepare();
mediaPlayer.start();
}
} catch (Exception e) {
e.printStackTrace();
}

这个例子来自另一个question有同样的问题。

关于android - 媒体播放器android中的SetDataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17678081/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com