Android 接收短信和播放音乐服务

标签 android service sms media-player

我是 android 编程的新手,我在获取短信接收服务以播放与传入的短信相关的音频文件时遇到问题。我有一个工作示例,但我无法停止从播放音乐文件或选择另一个文件来播放没有重叠的音频。所以我似乎需要让 SMS 接收服务调用媒体播放器服务,但不知道如何。此外,我还需要用不匹配的短信停止音乐。任何帮助都会很棒。这就是我在没有音频服务的情况下所拥有的。

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.telephony.SmsMessage;


public class SMSreceiver extends BroadcastReceiver {

 MediaPlayer mp1;

@Override
public void onReceive(Context ctx, Intent intent)
{
    Bundle bundle = intent.getExtras();        

    //mp1 = MediaPlayer.create(ctx, R.raw.jingle);

    if(null != bundle)
    {
        Object[] pdus = (Object[]) bundle.get("pdus");

        SmsMessage[] messages = new SmsMessage[pdus.length];
        for (int i = 0; i < messages.length; i++)
        {
            messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);

            if(messages[i].getDisplayMessageBody().equals("a"))
            {
                //Play alarm sound 
                mp1 = MediaPlayer.create(ctx, R.raw.a);
                mp1.setLooping(true); // Set looping
                mp1.start();
            } //---------------------------------------------------
            if(messages[i].getDisplayMessageBody().equals("b"))
            {
                //Play alarm sound 
                mp1 = MediaPlayer.create(ctx, R.raw.b);
                mp1.setLooping(true); // Set looping
                mp1.start();
            } //---------------------------------------------------

            if(messages[i].getDisplayMessageBody().equals("c"))
            {
                //Play alarm sound 
                mp1 = MediaPlayer.create(ctx, R.raw.c);
                mp1.setLooping(true); // Set looping
                mp1.start();
            } //---------------------------------------------------

            if(messages[i].getDisplayMessageBody().equals("d"))
            {
                //Play alarm sound 
                mp1 = MediaPlayer.create(ctx, R.raw.d);
                mp1.setLooping(true); // Set looping
                mp1.start();

            }  //---------------------------------------------------


        }
    }
}

最佳答案

我用一个线程解决了它。我删除了 mp1.setLooping(true); 部分并使用了这个

mp1 = MediaPlayer.create(context, R.raw.calmpiano);

        mp1.start();


        Thread splashTread = new Thread() {
            @Override
            public void run() {
                try {
                    int waited = 0;
                    while(true && (waited < 5000)) {
                        sleep(100);
                        if(true) {
                            waited += 100;
                        }
                    }
                } catch(InterruptedException e) {
                    // do nothing
                } finally {
                   // finish();
                    //startActivity(new Intent("com.talktome.android.MyOne.MyOneActivity"));
                    stop();
                }
            }
        };
        splashTread.start();
}

        `

关于Android 接收短信和播放音乐服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792464/

相关文章:

android - 在其调试标志设置为 true 时在市场上安装应用程序

c# - 如何在应用程序(控制台或服务)和 Web 服务之间共享数据?

javascript - 如何在 JavaScript 中强制等待 REST Api

android - Appcelerator Titanium 或 PhoneGap 上的 iPhone 和 Android 应用程序

java - 如何在双 SIM 卡中的 android 中发送短信?

android - Redmi 手机不询问短信权限,因此不阅读短信

Android - 调整照片大小和添加水印会导致图像质量差

android - 带有文本的警报对话框,后跟一个复选框和 2 个按钮

java - 如何在 Android 中使用 iText 打开 pdf 文件?

android - 服务中的 BroadcastReceiver : Design Issues