当我在安卓中收到消息时,如何调用媒体播放器



我想在收到消息时播放声音。我有一个 BroadcastReceiver,在其中我调用另一个称为 play 的 avtivity 的函数,它播放声音或音乐。我的代码如下所示:

在我的主要活动中

我的游戏活动:

public class PlayActivity extends Activity
{
    private MediaPlayer mediaPlayer;
    public void play() {
        mediaPlayer = MediaPlayer.create(this, R.raw.gotye);
        mediaPlayer.setLooping(true);
        mediaPlayer.start();
    }

我的广播接收器如下所示:

package org.secure.sms;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
public class SmsReceiver extends BroadcastReceiver
{
    public static final String SMS_EXTRA_NAME = "pdus";
    public static final String SMS_URI = "content://sms";
    private MediaPlayer mediaPlayer;
    private MainActivity Play;
    public void onReceive( Context context, Intent intent )
    {
        // Get SMS map from Intent
        Bundle extras = intent.getExtras();
        String messages = "";
        if ( extras != null )
        {
            // Get received SMS array
            Object[] smsExtra = (Object[]) extras.get( SMS_EXTRA_NAME );
            // Get ContentResolver object for pushing encrypted SMS to incoming folder
            ContentResolver contentResolver = context.getContentResolver();
            for ( int i = 0; i < smsExtra.length; ++i )
            {
                SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]);
                String body = sms.getMessageBody().toString();
                String address = sms.getOriginatingAddress();
                messages += "SMS from " + address + " :n";
                messages += body + "n";
                putSmsToDatabase( contentResolver, sms );
            }
            // Display SMS message
            Toast.makeText( context, messages, Toast.LENGTH_SHORT ).show();
            Play.play();
        }
    }

我收到一条错误消息,说应用程序不幸失败。我可以看到吐司消息,但应用程序没有播放音乐。

这可能是因为您使用的是Play.play()而类名是 PlayActivity。此外,如果您使用的是 .(),则您的播放方法必须是静态的;

除非您在其他地方启动了 PlayActivity,否则您的 Play 为空。也许您可以直接在广播接收器中创建和播放音乐?

我认为在使用原始类型时,您可能必须使用不同的输入方法。使用文件路径和 URI 会更容易,但这里有一些关于 Raw 文件的示例代码。

AssetFileDescriptor afd = resources.openRawResourceFd(R.raw.yourthinghere);
mp.setDataSource(afd.getDescriptor(), afd.getStartOffset(), afd.getLength()); 
mp.prepare();
mp.start();
afd.close():

最新更新