1

メッセージを受信したときに音を鳴らしたい。私は BroadcastReceiver を持っています。そこでは、音や音楽を再生する play と呼ばれる別のアクティビティから関数を呼び出します。私のコードは次のようになります。

私の主な活動では

私のプレイ アクティビティ:

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();
        }
    }

アプリが残念ながら失敗したというエラー メッセージが表示されます。トースト メッセージは表示されますが、アプリで音楽が再生されません。

4

2 に答える 2

0

PlayActivity を別の場所で初期化しない限り、Play は null です。おそらく、Broadcast Receiver 内で直接音楽を作成して再生できますか?

生の型を使用する場合は、別の入力アプローチを使用する必要があると思います。ファイル パスと URI を使用する方が簡単ですが、Raw ファイルのサンプル コードを次に示します。

AssetFileDescriptor afd = resources.openRawResourceFd(R.raw.yourthinghere);
mp.setDataSource(afd.getDescriptor(), afd.getStartOffset(), afd.getLength()); 
mp.prepare();
mp.start();
afd.close():
于 2012-10-14T08:11:01.747 に答える
0

Play.play()クラス名がPlayActivityなのに対し、使用していることが原因かもしれません。また、<classname>.<methodname>(); を使用している場合、play メソッドは静的でなければなりません。

于 2012-10-14T11:07:24.470 に答える