Преобразование текста в речь во фрагменте не работает
У меня есть фрагмент спиннера, текстовый вид и 3 кнопки.
Я хочу иметь возможность воспроизводить текст в аудио по щелчку кнопки, из моего фрагмента, и хотя я избавился от всех ошибок, я не слышу ничего, когда нажимаю кнопки, которые должны воспроизводить текст в аудио.
Я также хочу иметь возможность изменить язык в tts, и я смог это сделать, но на activity, и во фрагменте, это не работает.
Любая помощь будет очень признательна.
Спасибо.
Что я уже пробовал:
<pre>public class fragment2 extends Fragment implements View.OnClickListener,AdapterView.OnItemSelectedListener, TextToSpeech.OnInitListener { private Spinner spinner; TextView txt1,txt2; Button r1,b1,s1; private int id; ArrayList<String> lat; ArrayList<String> lon; private static final int MY_DATA_CHECK_CODE = 1; private static final int TTS_DATA_CHECK = 1; static final String TAG = "TTS"; double latitude; double longitude; private TextToSpeech mTts; SharedPreferences.Editor editor; SharedPreferences preferences; public fragment2() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.layout_fragment2, container, false);//Inflate Layout Intent checkIntent=new Intent(); checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); startActivityForResult(checkIntent,MY_DATA_CHECK_CODE); getActivity().setVolumeControlStream(AudioManager.STREAM_MUSIC); mTts= new TextToSpeech(getActivity(), fragment2.this); //mTts= new TextToSpeech(getActivity(), (TextToSpeech.OnInitListener) fragment2.this); preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE); spinner=(Spinner)view.findViewById(R.id.spin); txt2=(TextView) view.findViewById(R.id.txt); txt1=(TextView) getActivity().findViewById(R.id.txt1); //Toast.makeText(getContext(), txt1.getText().toString(),Toast.LENGTH_SHORT).show(); switch(Integer.valueOf(txt1.getText().toString())){ case R.id.part1: Toast.makeText(getContext(), "part1",Toast.LENGTH_SHORT).show(); break; case R.id.part2: Toast.makeText(getContext(), "part2",Toast.LENGTH_SHORT).show(); break; } view.findViewById(R.id.rb).setOnClickListener(mListener); view.findViewById(R.id.fb).setOnClickListener(mListener); view.findViewById(R.id.sb).setOnClickListener(mListener); spinner.setSelection(preferences.getInt("lang", 0)); // check if GPS enabled spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { Context context; Resources resources; String languageToLoad = null; switch (i) { case 0: context = LocaleHelper.setLocale(getActivity(), "es"); editor.putInt("lang", 0); editor.commit(); //prefs.setString("lang2","\"spa\", \"MEX\""); mTts.setLanguage(new Locale("spa", "MEX")); resources = context.getResources(); txt1.setText(txt1.getText().toString()); //txt2.setText(resources.getString(R.string.txt2)); languageToLoad = "es"; /*if(languageToLoad!=null) { Locale locale = new Locale(languageToLoad); Locale.setDefault(locale); Configuration config = new Configuration(); config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); }*/ break; case 1: context = LocaleHelper.setLocale(getActivity(), "en"); editor.putInt("lang", 1); editor.commit(); //prefs.setString(";ang2","Locale.US"); mTts.setLanguage(Locale.US); resources = context.getResources(); //Aca txt1.setText(resources.getString(R.string.txt1)); txt2.setText(resources.getString(R.string.txt2)); /*languageToLoad = "en"; if(languageToLoad!=null) { Locale locale = new Locale(languageToLoad); Locale.setDefault(locale); Configuration config = new Configuration(); config.locale = locale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); }*/ break; } } public void setLanguage(String l) { Intent intent = getActivity().getIntent(); getActivity().overridePendingTransition(0, 0); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); getActivity().finish(); getActivity().overridePendingTransition(0, 0); startActivity(intent); } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); return view; } void speak(String s) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Log.v(TAG, "Speak new API"); Bundle bundle = new Bundle(); bundle.putInt(TextToSpeech.Engine.KEY_PARAM_STREAM, AudioManager.STREAM_MUSIC); mTts.speak(s, TextToSpeech.QUEUE_FLUSH, bundle, null); } else { Log.v(TAG, "Speak old API"); HashMap<String, String> param = new HashMap<>(); param.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_MUSIC)); mTts.speak(s, TextToSpeech.QUEUE_FLUSH, param); } } @Override public void onDestroy() { super.onDestroy(); // Don't forget to shutdown tts! if (mTts != null) { Log.v(TAG, "onDestroy: shutdown TTS"); mTts.stop(); mTts.shutdown(); } } private final View.OnClickListener mListener = new View.OnClickListener() { public void onClick(View view) { switch (view.getId()) { case R.id.rb: // do stuff break; case R.id.fb: // do stuff break; case R.id.sb: speak(txt1.getText().toString()); // do stuff break; } } }; @Override public void onClick(View v) { } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { } @Override public void onNothingSelected(AdapterView<?> parent) { } @Override public void onInit(int status) { if(preferences.getInt("lang",0)==0){ Locale locSpanish = new Locale("spa", "MEX"); mTts.setLanguage(locSpanish); }else if(preferences.getInt("lang",0)==1){ mTts.setLanguage(Locale.US); } } }
David Crow
-...Я ничего не слышу..."
Достаточно ли громкий звук? Используя отладчик, вы вступили в speak()
метод, чтобы увидеть, что происходит и если переменные, как и ожидалось?
-...это не работает."
Что именно это означает?