soundpool无法播放

时间:2017-11-05 16:58:42

标签: android alarmmanager soundpool

我正在尝试使用soundpool发出警报

但我在下面遇到了一些麻烦

  

11-05 16:42:36.094 20402-20432 / com.example.lab714_pc.drug D / EGL_emulation:eglMakeCurrent:0xa99850c0:ver 3 1(tinfo 0xa9983260)   11-05 16:44:02.883 20402-20402 / com.example.lab714_pc.drug E / TEST:TEST   11-05 16:44:02.885 20402-21761 / com.example.lab714_pc.drug E / WVMExtractor:无法打开libwvm.so:dlopen失败:未找到库“libwvm.so”   11-05 16:44:02.885 20402-20402 / com.example.lab714_pc.drug W / SoundPool:样品1未准备好   11-05 16:44:02.888 20402-21762 / com.example.lab714_pc.drug I / OMXClient:MuxOMX ctor

以下是我的代码

public class PlayReceiver extends BroadcastReceiver {

private SoundPool sp;
private boolean spLoader = false;
private int sourceid;

@Override
public void onReceive(Context context, Intent intent) {

    Bundle bData = intent.getExtras();

    if (bData.get("msg").equals("play_voice")) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

            AudioAttributes audioAttrib = new AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_GAME)
                    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                    .build();
           sp= new SoundPool.Builder().setAudioAttributes(audioAttrib).setMaxStreams(6).build();
            Log.e("TEST","TEST");
        }
        else {

            sp = new SoundPool(6, AudioManager.STREAM_MUSIC, 0);
            Log.e("TEST","TEST");
        }
        sp.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                if (sampleId == R.raw.test) {
                   spLoader = true;
                }
            }
        });




        sourceid = sp.load(context, R.raw.test, 1);


        playSounds(1, context);

    }

}

public void playSounds(int repeatTime, Context context) {
    AudioManager am = (AudioManager) context.getApplicationContext()
            .getSystemService(Context.AUDIO_SERVICE);

    float audMaxVolumn = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

    float audCurrentVolumn = am.getStreamVolume(AudioManager.STREAM_MUSIC);

    float volRatio = audCurrentVolumn / audMaxVolumn;

    sp.play(sourceid, volRatio, volRatio, 1, repeatTime, 1);
  }
 }

以下是警报的主要内容

Intent intent11 = new Intent(MainActivity.this, PlayReceiver.class);
            intent11.putExtra("msg", "play_voice");
            intent11.addCategory(String.valueOf(SystemClock.elapsedRealtime()));

            long elapsed = SystemClock.elapsedRealtime() + 60 * 1000; //60秒

            PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 1, intent11,
                    PendingIntent.FLAG_UPDATE_CURRENT);
            AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
            am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, elapsed , pi);

1 个答案:

答案 0 :(得分:0)

我将代码更改为以下代码

public class PlayReceiver extends BroadcastReceiver {

private SoundPool sp;
private boolean spLoader = false;



@Override
public void onReceive(Context context, Intent intent) {

    Bundle bData = intent.getExtras();



    if (bData.get("msg").equals("play_voice")) {

        SoundPool sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);

        /** soundId for Later handling of sound pool **/
        int soundId = sp.load(context, R.raw.test, 1); // in 2nd param u have to pass your desire ringtone

        sp.play(soundId, 1, 1, 0, 0, 1);

        MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.test); // in 2nd param u have to pass your desire ringtone
        //mPlayer.prepare();
        mPlayer.start();





    }

}