2012-02-28 30 views
5

Sau quản lý để làm cho TextToSpeech.setEngineByPackageName() làm việc nhờ this answer, tôi bây giờ có "đối diện" vấn đề:TextToSpeech.setEngineByPackageName() trả về thành công ngay cả khi gói không có sẵn

tts.setEngineByPackageName("com.ivona.tts.voicebeta.eng.usa.kendra"); luôn trả TextToSpeech. SUCCESS, ngay cả khi gói đó chưa được cài đặt trong thiết bị.

Vì gói không có sẵn trên thiết bị, TTS tiến hành nói chuyện với mặc định của Android pico, dự kiến, nhưng tôi không hiểu tại sao setEngineByPackageName() trả về THÀNH CÔNG.

Làm cách nào để thực hiện điều này?

Trả lời

4

Đối với lợi ích của tất cả, tôi đăng câu trả lời cung cấp bởi @Nikolay Elenkov về một câu hỏi khác nhau (nhưng có liên quan):

Calling setEngineByPackageName() khi gói không tồn tại không phải là một ý tưởng tốt. Thay vào đó, kiểm tra xem nó đã được cài đặt và không cố gắng sử dụng nó nếu nó không được cài đặt:

boolean isPackageInstalled(String packageName) { 
    PackageManager pm = context.getPackageManager(); 
    try { 
    PackageInfo pi = pm.getPackageInfo(packageName, 0); 

    return pi != null; 
    } catch (NameNotFoundException e) { 
    return false; 
    } 
} 

Một ví dụ tốt về cách này được thực hiện có thể được xem tại địa chỉ:

http://code.google.com/p/wwwjdic/source/browse/branches/2.0/wwwjdic/src/org/nick/wwwjdic/TtsManager.java

Các vấn đề liên quan