Adesso provo, come avevo pensato, con l'emissione di un suono.
Devo creare un Broadcast receiver, non un'activity.
Mi ricimento nella creazione di un Broadcast receiver...
Vado a ripescarmi la mia stessa documentazione, e sarà il caso di fare un po' di esercizio.
Creo un BroadcastReceiver.
BroadcastReceiver receiver=new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub } };Ecco: basta dichiarare una variabile come BroadcastReceiver e istanziarla, e si viene guidati all'inserimento del metodo non implementato.
Ora, però, devo impostare il codice di onReceive, e dal momento che si trattava di un codice per la ripetizione di un suono, vorrei ripassare la sintassi del TTS.
Ecco, si inizializza una variabile di tipo TextToSpeech.
E' stato piuttosto difficile ricordare la sintassi del tts, che a suo tempo non avevo studiato a fondo quando l'avevo impiegata.
Adesso me la riscrivo di sana pianta con la solita tecnica del Mandala...
tts=new TextToSpeech(this,new TextToSpeech.OnInitListener() { R> @Override public void onInit(int status) { if(status==TextToSpeech.SUCCESS){ int result=tts.setLanguage(Locale.ITALIAN); } } });Fatto questo, dovrebbe essere pronto per parlare...
Vediamo...
Fatto.
Adesso mi occupo del BroadcastReceiver.
Non sono molto convinto, se metto questo tts.speak isolato, se possa funzionare... proviamo.
Ecco il BroadcastReceiver...
BroadcastReceiver receiver=new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { tts.speak("Ciao, bello", tts.QUEUE_FLUSH, null); } };...che si deve registrare. Come?
Con la parolina magica IntentFilter, che si dichiara e si inizializza normalmente, quindi ci si aggiunge una stringa come action con il metodo addAction.
Quindi si registra con registerReceiver che ha per parametri il receiver e il filter.
IntentFilter filter=new IntentFilter(); filter.addAction("azione"); registerReceiver(receiver,filter);Poi però lo devo anche chiamare. Lo faccio chiamare dal button...
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(); intent.setAction("azione"); sendBroadcast(intent); } });Proviamo... Funziona!!!
Ora dovrei richiamare il BroadcastReceiver da un'altra app.
Lo faccio, è facile.
public class MainActivity extends Activity { Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button=(Button)findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(); intent.setAction("azione"); sendBroadcast(intent); } }); } }E funziona, ma solo se è attiva contemporaneamente l'app primaria che registra il BroadcastReceiver!
Registrandolo da Manifest, invece, dovrebbe funzionare anche se l'app primaria è stata chiusa... ripassiamo e proviamo.
Ecco, se lo registro nel Manifest dovrebbe essere sempre attivo.
Proviamo.
<receiver android:name="MioRicevitore"> <intent-filter> <action android:name="azione" /> </intent-filter> </receiver>E vediamo un po'... (ovviamente tolgo il codice per la registrazione da codice)
No... ho provato a registrare con una classe separata, ma con il tts mi confondo... non funziona.
Provo con il Toast, per il momento.
Ecco il codice: ho creato una classe separata, ché una classe entro un'altra classe non può essere public e forse questo è il problema perché ottenevo un messaggio di errore che sembrava volesse significare che non trovava la classe registrata.
public class receiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"Ciao bellissimo!",Toast.LENGTH_LONG).show(); } }L'ho chiamata dall'app "creante" e il toast appare.
Adesso la chiamo da un'altra app dopo aver chiuso quella creante...
Ce l'avevo già salvata sul cellulare, e funziona anche questa!
Con il tts non funziona. Ho trovato qualche link da studiare.
LINK LINK Anche questo link è utile, per il tts.
Nessun commento:
Posta un commento