Android 编程 - 如何从广播接收器播放 SoundPool 声音?

Posted

技术标签:

【中文标题】Android 编程 - 如何从广播接收器播放 SoundPool 声音?【英文标题】:Android Programming - How to play a SoundPool sound from a broadcastreceiver? 【发布时间】:2011-08-23 17:02:35 【问题描述】:

我是 android 开发的新手,想知道如何在广播接收器中播放 SoundPool 声音?

我在某处读到使用 SoundPool 是播放声音的方式,但我不知道如何正确设置。

我的 Eclipse res\raw 文件夹中有一些声音文件,例如 wave 和 mp3 文件。我想播放一个名为 half.wav 的文件

您能否展示我需要放入广播接收器的示例代码?

这是代码的第一次尝试,但我确实收到一个错误,指出 soundID = soundPool.load(this, R.raw.half, 1);

“SoundPool 类型中的方法 Load(Context, Int, Int) 不适用...”

这是该类的代码:

package ChimeMe.BigBen;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
import android.os.Bundle;

import android.media.AudioManager;
import android.media.SoundPool;
import android.media.SoundPool.OnLoadCompleteListener;

public class AlarmReceiver extends BroadcastReceiver 

private SoundPool soundPool;
private int soundID;
boolean loaded = false;

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

    try 

        // Load the sound
        soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
        soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() 
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId,
                    int status) 
                loaded = true;
            
        );

        soundID = soundPool.load(this, R.raw.half, 1);

        Toast.makeText(context, "This is the alarm.", Toast.LENGTH_SHORT)
                .show();

     catch (Exception e) 
        Toast.makeText(
                context,
                "There was an error somewhere, but we still received an alarm",
                Toast.LENGTH_SHORT).show();
        e.printStackTrace();

    



提前致谢。

真的, 埃马德

【问题讨论】:

【参考方案1】:

如果您只想播放一种声音,我认为使用 MediaPlayer 会更快更容易...

这是我的一个应用程序的代码,该应用程序在此广播接收器运行时每 30 分钟播放一次哔声

public class Gameloop extends BroadcastReceiver 
    MediaPlayer mp = null;// Here 
    private static final String TAG = "VPET";

    @Override
    public void onReceive(Context context, Intent intent) 
        Log.d(TAG, "Loop running");
        if (Pet.isAlive == true) 

            mp = MediaPlayer.create(context, R.raw.beep);//Onreceive gives you context
            mp.start();// and this to play it

         else 

        
    





【讨论】:

感谢 Pheonix2105 提供编码示例。 :-)

以上是关于Android 编程 - 如何从广播接收器播放 SoundPool 声音?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中播放在线广播流 url。如何在 android 中播放 .pls 广播流 url

Android广播接收器从短信关键字开始

Android广播阻塞、延迟问题

如何将消息/数据从广播接收器(process1)发送到android中的服务线程(process2)?

android的停止后台服务

在高于 4.0 的 Android 版本中无法播放声音