2010-06-22 4 views
1

У меня есть приложение, которое считывает сообщения по мере их получения. Кажется, что pgm работает нормально, когда я запускаю его, или даже когда я нажимаю кнопку «Назад» на эмуляторе, однако, когда я запускаю другое приложение в том же эмуляторе, а затем, если сообщение получено, я могу видеть сообщение как Toast, но am не может получить звук, так как я могу это исправить?программа не работает в фоновом режиме

** TextSpeaker **

package com.example.TextSpeaker; 

import java.util.Locale; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.speech.tts.TextToSpeech; 
import android.speech.tts.TextToSpeech.OnInitListener; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 

// the following programme converts the text to speech 

public class TextSpeaker extends Activity implements OnInitListener { 
/** Called when the activity is first created. */ 
int MY_DATA_CHECK_CODE = 0; 
public static TextToSpeech mtts; 
public Button button,stop_button; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    button = (Button)findViewById(R.id.button); 
    stop_button=(Button)findViewById(R.id.stop_button); 

    Intent myintent = new Intent(); 
    myintent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
    startActivityForResult(myintent, MY_DATA_CHECK_CODE); 
    //edit text=(EditText)findViewById(R.id.edittext); 
} 

    public void buttonClickListener(View src){ 
    switch(src.getId()) 
    { 
    case(R.id.button): 
     Toast.makeText(getApplicationContext(), "The service has been started\n Every new message will now be read out", Toast.LENGTH_LONG).show(); 
      //Intent serviceintent = new Intent(this,SpeakerService.class); 
      //serviceintent.setAction(".SpeakerService"); 
      //startService(new Intent(this,SpeakerService.class)); 
     // startService(serviceintent); 
      break; 
    case(R.id.stop_button): 
     Toast.makeText(getApplicationContext(), "The service has been stopped\n ", Toast.LENGTH_LONG).show(); 
     mtts.stop(); 
     //stopService(new Intent(this,SpeakerService.class)); 
     break; 
    } 
    } 



    protected void onActivityResult(int requestcode,int resultcode,Intent data) 
    { 
    if(requestcode == MY_DATA_CHECK_CODE) 
    { 
     if(resultcode==TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) 
     { 
     // success so create the TTS engine 
     Log.v("TextSpeaker","Pico is installed in the system"); 
     mtts = new TextToSpeech(this,this); 
     mtts.setLanguage(Locale.ENGLISH); 

     } 
     else 
     { 
     //install the Engine 
     Intent install = new Intent(); 
     install.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
     startActivity(install); 
     } 
    } 

    } 
    public void onDestroy(Bundle savedInstanceStatBundle) 
    { 
    //mtts.shutdown(); 
    } 

    //public void onPause() 
    //{ 
    // super.onPause(); 
    // // if our app has no focus 
    // if(mtts!=null) 
    // mtts.stop(); 
    // } 
    @Override 
    public void onInit(int status) { 
    if(status==TextToSpeech.SUCCESS) 
    button.setEnabled(true); 


     }  
    } 

Приемник

package com.example.TextSpeaker; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.speech.tts.TextToSpeech; 
import android.telephony.SmsMessage; // supports both gsm and cdma 
import android.util.Log; 
import android.widget.Toast; 



public class Receiver extends BroadcastReceiver{ 


public static String str=""; 
@Override 
public void onReceive(Context context, Intent intent) { 
Bundle bundle = intent.getExtras(); 
Log.d("Receiver","Message received successfully"); 

SmsMessage[] msgs = null; 

if(bundle!=null) 
{ 
// retrive the sms received 

Object[] pdus = (Object[])bundle.get("pdus"); 
msgs = new SmsMessage[pdus.length]; 
for(int i=0;i<msgs.length;i++) 
    { 
str=""; 
msgs[i]=SmsMessage.createFromPdu((byte[]) pdus[i]); 
str+="Message From "+msgs[i].getOriginatingAddress()+"."; 
str+="The message is "+msgs[i].getMessageBody().toString(); 
TextSpeaker.mtts.speak(Receiver.str, TextToSpeech.QUEUE_FLUSH,null); 
} 
Toast.makeText(context,str,Toast.LENGTH_LONG).show(); 



    } 
} 
} 
+0

Вы что-то предложили? – pranay

+0

i cheked logcat, и обнаружил, что, когда я запускаю новое приложение, я получаю сообщение Toast, но для речи я получаю «нулевой синтез - не могу говорить» .. может кто-то объяснить, почему это так? – pranay

ответ

0

Это, скорее всего, потому что библиотека синтеза речи не была установлена ​​по умолчанию на вашем Android устройстве. Попробуйте посетить рынок Android и установите Speech Synthesis Language Pack - затем повторите попытку.

Не все устройства установлены по умолчанию, даже некоторые из них очень новые.

Смежные вопросы