Android 对播放的声音池调用仅在错误日志中产生结果

Android 对播放的声音池调用仅在错误日志中产生结果,android,soundpool,Android,Soundpool,当我将SoundPool实例移动到单独的线程和类时,遇到了一个问题 没有声音播放,尽管所有流和状态标志都成功 我在错误日志中得到以下输出: D/chris﹕ before play E/AudioPolicyManagerBase﹕ getOutput() IOProfile is null. E/AudioPolicyManagerBase﹕ getOutput() IOProfile is null. E/AudioPolicyManagerBase﹕ getOutput() IOProfi

当我将SoundPool实例移动到单独的线程和类时,遇到了一个问题

没有声音播放,尽管所有流和状态标志都成功

我在错误日志中得到以下输出:

D/chris﹕ before play
E/AudioPolicyManagerBase﹕ getOutput() IOProfile is null.
E/AudioPolicyManagerBase﹕ getOutput() IOProfile is null.
E/AudioPolicyManagerBase﹕ getOutput() IOProfile is null.
D/libc﹕ pt_debug : pthread_create->start_routine=0x402c8509, tls=0x55c6ff00, arg=0x512c4370
D/libc﹕ pt_debug : __thread_entry->func=0x402c8509 , tls=0x55c6ff00, arg=0x512c4370
D/chris﹕ after play
有人知道这些错误表明了什么吗

public class SoundPoolFactory extends Thread {

    public SoundPool soundPool;
    public HashMap<String, AssetFileDescriptor> soundLoadList = new HashMap<String, AssetFileDescriptor>();

    public void run()
    {
        Looper.prepare();
        looper = Looper.myLooper();

        soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
        soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                soundLoaded.release();
            }
        });

        Iterator iterator = soundLoadList.entrySet().iterator();
        while (iterator.hasNext())
        {
            Map.Entry entry = (Map.Entry)iterator.next();
            loadSound((AssetFileDescriptor)entry.getValue(), (String)entry.getKey());
        }

        Looper.loop();
    }

    public void loadSound(AssetFileDescriptor assetFile, String soundIndex)
    {
        try {
            soundIndexes.put(soundIndex, soundPool.load(assetFile, 1));
        } catch (Exception e)
        {
            StringWriter writer = new StringWriter();
            PrintWriter printWriter = new PrintWriter( writer );
            e.printStackTrace(printWriter);
            printWriter.flush();

            Log.e("chris", writer.toString());
        }
    }

    public SoundPool getSoundPoolInstance()
    {
        try {
            Log.d("chris", "before play");
            soundPool.play(1, 1.0f, 1.0f,1,0,1.0f);
            Log.d("chris", "after play");
            return soundPool;
        }
        catch (Exception e)
        {
            StringWriter writer = new StringWriter();
            PrintWriter printWriter = new PrintWriter( writer );
            e.printStackTrace(printWriter);
            printWriter.flush();

            Log.e("chris", writer.toString());
        }

        return null;
    }
}
公共类SoundPoolFactory扩展线程{
公共声池声池;
public HashMap soundLoadList=new HashMap();
公开募捐
{
Looper.prepare();
looper=looper.myLooper();
soundPool=新的soundPool(3,AudioManager.STREAM_MUSIC,0);
soundPool.setOnLoadCompleteListener(新的soundPool.OnLoadCompleteListener(){
@凌驾
public void onLoadComplete(声音池声音池,int-sampleId,int-status){
soundLoaded.release();
}
});
迭代器迭代器=soundLoadList.entrySet().Iterator();
while(iterator.hasNext())
{
Map.Entry=(Map.Entry)迭代器.next();
loadSound((AssetFileDescriptor)entry.getValue(),(String)entry.getKey());
}
loop.loop();
}
公共void loadSound(AssetFileDescriptor assetFile,String soundIndex)
{
试一试{
soundIndex.put(soundIndex,soundPool.load(assetFile,1));
}捕获(例外e)
{
StringWriter编写器=新的StringWriter();
PrintWriter PrintWriter=新的PrintWriter(writer);
e、 printStackTrace(printWriter);
printWriter.flush();
Log.e(“chris”,writer.toString());
}
}
公共声音池getSoundPoolStance()
{
试一试{
日志d(“克里斯”,“赛前”);
声音池。播放(1,1.0f,1.0f,1,0,1.0f);
日志d(“克里斯”,“赛后”);
返回声池;
}
捕获(例外e)
{
StringWriter编写器=新的StringWriter();
PrintWriter PrintWriter=新的PrintWriter(writer);
e、 printStackTrace(printWriter);
printWriter.flush();
Log.e(“chris”,writer.toString());
}
返回null;
}
}

这个问题运气好吗?我在日志中看到了同样的错误。我真的记不起来了。我猜我已经解决了。请看这里: