我向大师们问好。我目前正在开发一个类似于“待办事项列表”的应用程序。我已经成功实现了获取Notifications
. 我试图Sony Xperia Tipo Dual ST21i2
在预先指定的时间实现文本到语音,以使我的发言成为我添加的任务。但是我的手机没有听到任何声音。
public class NotifyService extends Service implements OnInitListener{
private TextToSpeech tts;
int task_id;
private static final int NOTIFICATION = 123;
public static final String INTENT_NOTIFY = "com.blundell.tut.service.INTENT_NOTIFY";
private NotificationManager mNM;
SQLiteDatabase database;
String tmp_task_brief = null;
public class ServiceBinder extends Binder
{
NotifyService getService()
{
return NotifyService.this;
}
}
@Override
public void onCreate() {
mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
tts = new TextToSpeech(getApplicationContext(), this);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
task_id = intent.getIntExtra("task_id", 0);
loadDatabase();
Cursor cursor = database.query("task_info", new String[]{"task_brief"}, "task_id=?", new String[]{task_id+""}, null, null, null);
while(cursor.moveToNext())
{
tmp_task_brief = cursor.getString(0);
}
cursor.close();
database.close();
if(intent.getBooleanExtra(INTENT_NOTIFY, false))
showNotification(tmp_task_brief);
return START_NOT_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
private final IBinder mBinder = new ServiceBinder();
private void showNotification(String tmp_task_brief) {
CharSequence title = "To Do Task Notification!!";
int icon = R.drawable.ic_menu_notifications;
CharSequence text = tmp_task_brief;
long time = System.currentTimeMillis();
Notification notification = new Notification(icon, text, time);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, TaskDetails.class), 0);
notification.setLatestEventInfo(this, title, text, contentIntent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
mNM.notify(NOTIFICATION, notification);
//---------vibrate on notification-----------
Vibrator vibrate = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
int dot = 200;
int dash = 500;
int short_gap = 200;
int medium_gap = 500;
int long_gap = 1000;
long[] pattern = {
0, // Start immediately
dot, short_gap, dot, short_gap, dot, // s
medium_gap,
dash, short_gap, dash, short_gap, dash, // o
medium_gap,
dot, short_gap, dot, short_gap, dot, // s
long_gap
};
// Only perform this pattern one time (-1 means "do not repeat")
vibrate.vibrate(pattern, -1);
speakOut(tmp_task_brief);
stopSelf();
}
void loadDatabase()
{
database = openOrCreateDatabase("ToDoDatabase.db",
SQLiteDatabase.OPEN_READWRITE, null);
}
@Override
public void onInit(int status) {
// TODO Auto-generated method stub
if (status == TextToSpeech.SUCCESS) {
int result = tts.setLanguage(Locale.US);
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.i("TTS", "This Language is not supported");
Toast.makeText(getApplicationContext(), "This Language is not supported", Toast.LENGTH_SHORT).show();
} else {
speakOut(tmp_task_brief);
}
} else {
Log.i("TTS", "Initilization Failed!");
}
}
@Override
public void onDestroy() {
// Don't forget to shutdown tts!
if (tts != null) {
tts.stop();
tts.shutdown();
}
super.onDestroy();
}
private void speakOut(String task) {
tts.speak(task, TextToSpeech.QUEUE_FLUSH, null);
}
}
我记录了如下输出错误:
05-31 11:49:00.450: I/TextToSpeech(11621): Sucessfully bound to com.google.android.tts
05-31 11:49:00.490: W/TextToSpeech(11621): speak failed: not bound to TTS engine
05-31 11:49:00.490: I/TextToSpeech(11621): Connected to ComponentInfo{com.google.android.tts/com.google.android.tts.GoogleTTSService}
请帮我解决这个错误。