我想在收到信息时播放声音。我有一个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();
}
}
我收到一条错误消息,说app很不幸失败了。我可以看到吐司消息,但应用程序没有播放音乐。
答案 0 :(得分:0)
除非您在其他地方启动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():
答案 1 :(得分:0)
可能是因为您使用的是Play.play()
,而类名是PlayActivity。此外,如果您使用&lt; clasname&gt;,则播放方法必须是静态的。&lt; methodname&gt;();