Отправляет email-рассылки с помощью сервиса Sendsay

[prg] Как получить список всех голосов в android?

Всех приветствую. Подскажите пожалуйста,как создать и вывести список
всех голосов в android? Именно голосов,потому,что с синтезаторами я
разобрался,а вот при попытке вывести список всех голосов,т.е при нажатии
на кнопку,программа крэшится. Пример я брализ интернета и адоптировал
его под свою программу. Я знаю,что на разных андроидах голоса получаются
по-разному,т.к на разных api могут отличаться методы классов и
интерфейсов,отвечающих за tts. В моём коде,как я уже писал,я
сделал,чтобы tts говорил нужным мне синтезатором,поэтому в коде у
объекта tts класса TextToSpeech третьий параметр это строкавая
переменная,отвечающая за тот синтезатор речи,который я хочу услышать.
Заранее всех благодарю за помощь со списком голосов и ниже привожу код.
package com.example.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.speech.tts.UtteranceProgressListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends ListActivity implements OnInitListener
{
private String firstTtsName;
private String firstTtsLabel;
private String[] Listofvoices;
private List<TextToSpeech.EngineInfo> enginsList;
private TextToSpeech ttsEngins=null;
private TextToSpeech tts=null;
private HashMap <String, String> ttsMap;
private ListView lv;
private Context context;
private Intent intent=new Intent(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
private ArrayList<String> voices;
@Override
public void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
voices=new ArrayList<String>();
ttsEngins=new TextToSpeech(this, enginsListener);
ttsMap = new HashMap<String, String>();
context=this;
startActivityForResult(intent, 0);
setContentView(R.layout.activity_main);
}
OnInitListener enginsListener=new OnInitListener() {
@Override
public void onInit(int status) {
if (status==TextToSpeech.SUCCESS) {
enginsList=ttsEngins.getEngines();
firstTtsName=enginsList.get(0).name;
firstTtsLabel=enginsList.get(0).label;
voices=intent.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
ttsEngins.shutdown();
ttsEngins=null;
Listofvoices =new String[enginsList.size()];
tts=new TextToSpeech(MainActivity.this, MainActivity.this, firstTtsName);
tts.setOnUtteranceProgressListener(progressListener);
}
}
};
public void onInit(int status)
{
if (status==TextToSpeech.ERROR) {
tts=null;
Toast.makeText(context, "У Вас не установлен синтезатор речи",
Toast.LENGTH_LONG).show(); }
else {
tts.setSpeechRate(1);
tts.speak("добро пожаловать в приложение function_recognizer",
TextToSpeech.QUEUE_FLUSH, ttsMap);
} }
UtteranceProgressListener progressListener=new
UtteranceProgressListener() {
@Override
public void onDone(String arg0) {
}
@Override
public void onError(String arg0) {
Toast.makeText(context, "У Вас не установлен синтезатор речи",
Toast.LENGTH_LONG).show();
}
@Override
public void onStart(String arg0)
{
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {// Handle action
bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void Button1 (View view)
{
for(int a=0;a<enginsList.size();a++)
Listofvoices[a]=enginsList.get(a).name;
// теперь я пытаюсь вместо списка синтезаторов вывести список голосов.
setListAdapter(new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, voices));
tts.setSpeechRate(1);
tts.speak("тестируем tts при нажатии кнопки", TextToSpeech.QUEUE_FLUSH,
ttsMap);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
}

@Override
protected void onDestroy() {
super.onDestroy();
tts.shutdown();
tts=null;
} }

Ответить   Thu, 12 Nov 2015 22:31:09 +0300 (#3333298)