2010-06-15 10 views
0

J'ai écrit une application simple qui parlerait à l'utilisateur tout message entrant. Les deux programmes semblent fonctionner parfaitement quand je les ai lancés comme deux pgms séparés, mais en les gardant dans le même projet/package, seul l'écran du programme d'enceintes est vu et le récepteur pgm ne semble pas fonctionner. Quelqu'un peut-il m'aider s'il vous plaît?application ne fonctionne pas

pgm haut-parleur est:

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.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 

// the following programme converts the msg user to speech 

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

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

    button = (Button)findViewById(R.id.button); 
    button.setOnClickListener(new OnClickListener(){ 

@Override 
    public void onClick(View v) { 
    Toast.makeText(getApplicationContext(), "The service has been started\n Every new message will now be read out", Toast.LENGTH_LONG).show(); 

    } 

    }); 
    Intent myintent = new Intent(); 
    myintent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
    startActivityForResult(myintent, MY_DATA_CHECK_CODE); 
} 
    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 
     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); 

} 


} 

et le programme récepteur est:

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.widget.Toast; 



public class Receiver extends BroadcastReceiver{ 


@Override 
public void onReceive(Context context, Intent intent) { 
Bundle bundle = intent.getExtras(); 
SmsMessage[] msgs = null; 
String str=""; 
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++) 
{ 
msgs[i]=SmsMessage.createFromPdu((byte[]) pdus[i]); 
str+="Message From "+msgs[i].getOriginatingAddress()+"."; 
str+="Message "+msgs[i].getMessageBody().toString(); 
} 
Toast.makeText(context,str,Toast.LENGTH_SHORT).show(); 
TextSpeaker tsp = new TextSpeaker(); 
tsp.mtts.speak(str, TextToSpeech.QUEUE_ADD,null); 

} 

} 

}

+0

Etes-vous sûr d'avoir correctement fusionné les fichiers manifestes? Y a-t-il quelque chose de pertinent dans les journaux? – Chris

Répondre

0

Je suppose que tsp.mtts est nulle. Vous créez directement une nouvelle instance de TextSpeaker au lieu que l'activité soit créée correctement par le système d'exploitation. Il n'y a donc aucune raison pour que sa méthode onCreate soit appelée, donc mtts ne sera jamais initialisée.

+0

ok, alors pouvez-vous s'il vous plaît suggérer comment puis-je le corriger, en fait je suis calme nouveau à android – pranay

+0

j'ai essayé de le corriger en écrivant TextSpeaker tts; juste après la méthode onReceive, puis supprimé l'instruction de création d'instance. et avait simplement tsp.mtts.speak (..), encore il montre même erreur d'exécution? Y a-t-il un autre moyen de le faire? – pranay