无法在线程内创建 MediaPlayer

Cannot create MediaPlayer inside thread

我有一个启动线程的服务,我需要在其中创建一个 MediaPlayer:

onStartCommand里面我调用了运行线程的main函数

public int onStartCommand(Context context, Intent intent, int flags, int startId) {
    Log.e(TAG, "onStartCommand");

    doTask(context);
    return START_STICKY;
}


void doTask(Context context) {

    isActive = true;
    thread = new Thread(new Runnable() {
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public void run() {
            try {
                threadLoop(context);
            } 
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

    thread.start();
    Log.e(TAG, "Thread started");
}

在此之后,我正在 threadLoop 中尝试创建一个 MediaPlayer


MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer = MediaPlayer.create(context, AudioData);

但我无法对第一个 context 参数执行任何操作。我尝试发送上下文并获取基础上下文,但它不起作用。

也许我应该为 MediaPlayer 使用其他服务?

提前致谢

更新

错误: Cannot resolve method 'create(android.content.Context, short[])'.

您向第二个参数传递了错误的数据。第一个参数没问题。第二个是资源 ID 或 Uri,而不是 short[]。如果短数组应该是音频数据(如原始 .wav 数据),请将其写入文件并将该文件的 URI 传递给它。

此外,像这样将上下文传递给线程很危险,可能会导致内存泄漏。您需要确保在服务结束时线程也结束以防止它。

你的代码应该是这样的

MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer = MediaPlayer.create(this, uri);