2012-01-02 88 views
-1

我正在製作一個android應用程序,一旦收到包含「PhoneAlarm」的短信,它將播放一個mp3文件。 這是最適合我的代碼。在Android應用程序中播放MP3文件

需要注意的是:「我不會使用所有在這裏的編碼」 看看我的代碼:

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.Environment; 
import android.telephony.gsm.SmsMessage; 
import android.widget.DigitalClock; 
import android.widget.Toast; 
import android.media.MediaPlayer; 

public class IncomingSmsCaptureApp extends BroadcastReceiver { 
MediaPlayer mp1; 
@Override 
public void onReceive(Context context, Intent intent) { 
File sdcard = Environment.getExternalStorageDirectory(); 

//Get the text file 
File file = new File(sdcard,"Notes\file.txt"); 

//Read text from file 
String text = new String(); 

try { 
    BufferedReader br = new BufferedReader(new FileReader(file)); 
    String line; 

    while ((line = br.readLine()) != null) { 
    } 
} 
catch (IOException e) { 
    //You'll need to add proper error handling here 
} 
//---get the SMS message passed in--- 
Bundle bundle = intent.getExtras();  
SmsMessage[] msgs = null; 
String str = "";  
String Message = ""; 
if (bundle != null) 
{ 
//---retrieve the SMS message received--- 
Object[] pdus = (Object[]) bundle.get("pdus"); 
msgs = new SmsMessage[pdus.length];   
for (int i=0; i<msgs.length; i++){ 
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);    
str += "SMS from " + msgs[i].getOriginatingAddress();      
str += " :"; 
str += msgs[i].getMessageBody().toString(); 
str += "\n";  
Message = msgs[i].getMessageBody().toString(); 
} 
//---display the new SMS message--- 
Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
if (Message == "PhoneAlarm") { 
//Play alarm sound 
mp1 = MediaPlayer.create(context, R.raw.alarm); 
mp1.start(); 
} 
}  
} 
} 

回答

1

setDataSource()方法期望媒體文件的字符串路徑,而不只是一個資源ID,您可以使用create(context, resid)代替它來創建它,並且它將準備好播放您的聲音:

//When creating your player: 
mp1 = MediaPlayer.create(context, R.raw.alarm); 

//When playing sound, note that prepare() should not be called: 
mp1.start(); 

//When you don't need the player anymore: 
mp1.release(); 
+0

嗨!非常感謝,但一旦我收到消息,它仍然沒有播放我的聲音。請現在看看代碼。 – MySoftware 2012-01-02 14:18:05

+0

這是因爲您使用==運算符比較Message和「PhoneAlarm」,而是調用Message.equals(「PhoneAlarm」)(它比較字符串的內容,==只比較對象,出現了很多問題關於這個如果你想閱讀更多關於它的細節)。另外,由於每次播放聲音時都要創建一個新的MediaPlayer,因此您應該記得在其上調用release()方法。 – Jave 2012-01-02 14:24:42

+0

你讓我一天!非常感謝!它現在正常工作!:-)但如何寫入SD卡,以便它可以讀取? – MySoftware 2012-01-02 14:30:05

相關問題