Я новичок в android.Я пытаюсь создать приложение-анонс вызывающего абонента. Следующий мой код. Журналы показывают, что код выполняется просто отлично, то есть конструктор TextToSpeech выполняет и достигает метода onInit до самого конца, однако, когда я его тестирую, звук не слышен.Как создать объект TextToSpeech в Activity, вызванном из широковещательного приемника?
Это мой CustomBroadcastReceiver.java:
public class CustomBroadcastReceiver extends BroadcastReceiver {
protected String newSender;
@Override
public void onReceive(Context context, Intent intent) {
Log.v("", "logger WE ARE INSIDE!!!!!!!!!!!");
Intent i=new Intent(context,ReceiverActivity.class);
TelephonyManager telephony = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener();
telephony.listen(customPhoneListener,
PhoneStateListener.LISTEN_CALL_STATE);
Bundle bundle = intent.getExtras();
String phoneNr = bundle.getString("incoming_number");
Log.v("", "logger phoneNr: " + phoneNr);
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(phoneNr));
Cursor cursor = context.getContentResolver().query(uri,
new String[] { PhoneLookup.DISPLAY_NAME }, phoneNr, null, null);
if (cursor.moveToFirst()) {
newSender = cursor.getString(cursor
.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));
}
i.putExtra("ID", newSender);
Log.d("","logger intent" + i.getStringExtra("ID"));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
cursor.close();
}
}
Это ReceiverActivity.java
public class ReceiverActivity extends Activity implements TextToSpeech.OnInitListener{
String name;
private TextToSpeech tts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_receiver);
Log.d("","logger reached ReceiverActivity");
tts = new TextToSpeech(this, this);
Log.d("","logger created tts object");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.receiver, menu);
return true;
}
@Override
public void onInit(int status) {
Log.d("","logger reached onInit");
if (status == TextToSpeech.SUCCESS) {
int result = tts.setLanguage(Locale.US); // java.Util.Locale for
// country codes
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS", "This Language is not supported");
} else {
speakOut();
}
} else {
Log.e("TTS", "Initilization Failed!");
}
}
private void speakOut() {
tts.speak(name, TextToSpeech.QUEUE_FLUSH, null);
Log.d("","logger speak executed");
}
}
Не могли бы вы сказать мне, где я неправильно?
привет, что такое значение имени. где вы назначаете в работе приемника. Я думаю, что значение name равно null. – suresh
О да. Я забыл getExtra(). Это сработало. Благодарю. Однако он дважды объявляет имя. Один раз во время вызова и один раз, когда вызов заканчивается. Почему это так? Это потому, что я получаю его в трансляции для каждого изменения состояния телефона? – user3217900