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); HashMapHo 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.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"); } }
Nessun commento:
Posta un commento