soundPool.load 上下文问题

Posted

技术标签:

【中文标题】soundPool.load 上下文问题【英文标题】:Issue with soundPool.load Context 【发布时间】:2016-10-21 21:32:49 【问题描述】:

我的应用中有一个调用异步任务的按钮。 这个异步任务应该在每个 ProgressUpdate 上播放音频文件。 到目前为止,我想出了很多,但我一直坚持:

我打电话

        this.strengthSound[0] = this.soundPool.load(this, R.raw.strength0,1);
        this.strengthSound[1] = this.soundPool.load(this, R.raw.strength1,1);
        this.strengthSound[2] = this.soundPool.load(this, R.raw.strength2,1);
        this.strengthSound[3] = this.soundPool.load(this, R.raw.strength3,1);
        this.strengthSound[4] = this.soundPool.load(this, R.raw.strength4,1);

用strengthx.mp3 填充一个数组。

无论如何:我在加载语句中收到“this”错误:

Error:(165, 57) error: incompatible types: AIM_start.start_AIM cannot be converted to Context

我必须在这个 soundPool.load(Context, ResourceID, ..) 中使用什么上下文?

提前感谢您的帮助... :)

【问题讨论】:

【参考方案1】:
private Context mContext;

onCreate(...) 
    mContext = this;



// inside your AsyncTask 
...

    onProgressUpdate(int progress) 
      this.strengthSound[0] = this.soundPool.load(mContext, R.raw.strength0,1);
      ...
    

我忘记了 AsyncTasks 的实际方法签名,但这是基本的概要。你在滥用this

您的活动中的this 和您的 AsyncTask 中的this 是不同的。 AsyncTask 中的this 指的是自身,即AsyncTask,但您的onCreate 中的this (再次)指的是自身,即Activity 本身。

不确定这是否有帮助,但请随时详细说明评论:)

【讨论】:

以上是关于soundPool.load 上下文问题的主要内容,如果未能解决你的问题,请参考以下文章

SoundPool.load() 是不是设计为异步加载?

将音频文件流式传输到 soundpool load() Android

如何在 soundPool (Android) 中逐渐加载声音?

如何停止通过 Soundpool 播放声音?

如何停止 SoundPool 中的所有声音?

加载文件时Android Soundpool错误