Я работаю над приложениями для звонков по имени. Но мой проект не говорит, когда получено SMS. Он получает его успешно, но не может говорить об этом. Я думаю, что есть проблема с вызовом TTS от BroadcastReceiver
. Вот мой код:TTS внутри broadcastreciever звонок для входящего звонка/sms
public class SMSAnnouncer extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle b = intent.getExtras();
SmsMessage[] mensajes = null;
String cadena = "";
if (b != null) {
Object[] objetos = (Object[]) b.get("pdus");
mensajes = new SmsMessage[objetos.length];
for (int i = 0; i < mensajes.length; i++) {
mensajes[i] = SmsMessage.createFromPdu((byte[]) objetos[i]);
cadena += "SMS de " + mensajes[i].getOriginatingAddress();
cadena += "Compuesto por...";
cadena += mensajes[i].getMessageBody().toString();
cadena += "\n";
}
Toast.makeText(context, cadena, Toast.LENGTH_LONG).show();
Speaker habla = new Speaker();
habla.speak(cadena);
}
}
}
public class Speaker extends Activity {
TextToSpeech ttp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ttp = new TextToSpeech(getApplicationContext(), new OnInitListener() {
@Override
public void onInit(int status) {
if (status != TextToSpeech.ERROR) {
Locale loc = new Locale("spa", "ESP");
ttp.setSpeechRate(2);
ttp.setLanguage(Locale.US);
ttp.setSpeechRate(0.8f);
}
}
});
}
void speak(String sms) {
ttp.speak(sms, TextToSpeech.QUEUE_FLUSH, null);
}
}
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.callandsmsblocker.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="com.callandsmsblocker.CallAnnouncer" >
<intent-filter android:priority="1000" >
<action android:name="android.intent.action.PHONE_STATE" >
</action>
</intent-filter>
</receiver>
<receiver android:name="com.callandsmsblocker.SMSAnnouncer" >
<intent-filter android:priority="1000" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>