Ecco fatto:
MainActivity:
public class MainActivity extends Activity {
boolean flag=true;
Button button;
Button bttStart;
Intent intent;
AlarmManager alarmManager;
PendingIntent pendingIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button1);
bttStart=(Button)findViewById(R.id.button2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(new Intent(getApplicationContext(),BaseAlarm.class));
}
});
bttStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intent=new Intent(getApplicationContext(),BaseAlarm.class);
startService(intent);
}
});
}
}
BaseAlarm (service):
public class BaseAlarm extends Service{
Intent intent;
PendingIntent pendingIntent;
AlarmManager alarmManager;
int mSecs=5*1000;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startUI){
Log.v("BASEALARM","ONSTARTCOMMAND");
intent=new Intent(this,Servizio.class);
pendingIntent=PendingIntent.getService(this, 0, intent, 0);
alarmManager=(AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
0,
mSecs,
pendingIntent);
return Service.START_NOT_STICKY;
}
public void onDestroy(){
alarmManager.cancel(pendingIntent);
stopService(new Intent(getApplicationContext(),Servizio.class));
super.onDestroy();
Log.v("BASEALARM","ONDESTROY");
}
}
Servizio (service):
public class Servizio extends Service implements TextToSpeech.OnInitListener,TextToSpeech.OnUtteranceCompletedListener{
TextToSpeech tts;
@Override
public void onCreate(){
tts=new TextToSpeech(this,this);
Log.v("SEGNALE", "ONCREATE");
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onInit(int status) {
if(status==TextToSpeech.SUCCESS){
int result=tts.setLanguage(Locale.ITALIAN);
tts.setOnUtteranceCompletedListener(this);
HashMap hashMap=new HashMap();
hashMap.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "frase");
tts.speak("Ciao, birichino.", TextToSpeech.QUEUE_FLUSH, hashMap);
}
Log.v("SEGNALE","ONINIT");
}
@Override
public void onUtteranceCompleted(String utteranceId) {
try{
tts.stop();
tts.shutdown();
stopSelf();
}catch(Exception e){}
Log.v("SEGNALE","ONUTTERANCE");
}
@Override
public void onDestroy(){
super.onDestroy();
Log.v("SEGNALE","ONDESTROY");
}
}
Ho dovuto aggiungere un try...catch all'evento onDestroy di Servizio perché certamente la chiusura del TTS impiega del tempo per cui lo stopSelf veniva eseguito probabilmente in anticipo.
Nessun commento:
Posta un commento