注意:我有点像菜鸟,所以不知道这些错误是什么意思。
这是我的班级代码:
package ryan.test;
import java.util.HashMap;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
public class MySingleton {
private MySingleton instance;
private static SoundPool mSoundPool;
private HashMap<Integer, Integer> soundPoolMap;
public static final int A1 = 1;
private MySingleton() {
mSoundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);// Just an example
soundPoolMap = new HashMap<Integer, Integer>();
soundPoolMap.put(A1, mSoundPool.load(this, R.raw.a, 1));
// soundPoolMap.put(A5, mSoundPool.load(MyApp.this, R.raw.a, 1));
}
public synchronized MySingleton getInstance() {
if(instance == null) {
instance = new MySingleton();
}
return instance;
}
public void playSound(int sound) {
AudioManager mgr = (AudioManager)MySingleton.getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = streamVolumeCurrent / streamVolumeMax;
mSoundPool.play(soundPoolMap.get(sound), volume, volume, 1, 0, 1f);
}
public SoundPool getSoundPool() {
return mSoundPool;
}
}
我收到两个错误,第一个错误就在这里:
soundPoolMap.put(A1, mSoundPool.load(this, R.raw.a, 1));
错误说The method load(Context, int, int) in the type SoundPool is not applicable for the arguments (MySingleton, int, int)
第二个错误在这里:
AudioManager mgr = (AudioManager)MySingleton.getSystemService(Context.AUDIO_SERVICE);
,错误显示为The method getSystemService(String) is undefined for the type MySingleton
答案 0 :(得分:2)
除非传入applicationContext或activity,否则无法访问非活动类中的系统服务。您需要在extends Activity
课程中执行此代码。
您需要在构造函数中包含上下文,以便访问声音提供程序提供的服务,或者传入声音提供程序管理对象以访问这些对象。
代码应该是微不足道的,只需在类中声明一个SoundPool对象并将其传递给构造函数。
答案 1 :(得分:1)
您需要一个Context才能使用这些方法。 getSystemService
是Context实例的方法myActivity.getSystemService()
。 load()
还希望您将Context实例(myActivity)作为第一个参数传递。建议您不要在主活动之外保留对上下文的引用,因此您应该考虑将此逻辑移回活动中。你为什么试图在单身人士中这样做?在后台播放音乐?使用服务。
答案 2 :(得分:1)
方法加载需要Context
的实例(即Activity
或Service
)。由于您的单例没有该实例,您需要先设置Context
的实例,然后才能使用该实例调用load方法。
因此,您无法在构造函数中执行此操作。