Đây không phải là câu trả lời bạn đang mong đợi, như tại thời điểm viết bài, tôi không tin rằng có một giải pháp chuyển tiếp thẳng đến này. Tôi rất hy vọng được chứng minh là sai.
tôi yêu cầu một nâng cao để cung cấp thông tin này lập trình một thời gian dài trước - here
Việc tăng cường cho một tham số bổ sung RecognizerIntent.EXTRA_SUPPORTED_OFFLINE_LANGUAGES
:
Nó chắc chắn sẽ là tầm thường cho điều này sẽ được bổ sung và sử dụng trong những điều sau đây cách:
final Intent vrIntent = new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS);
getContext().sendOrderedBroadcast(vrIntent, null, new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
final ArrayList<String> vrStringLocales = intent.getExtras().getStringArrayList(
RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES);
// This would be nice
final ArrayList<String> vrStringOfflineLocales = intent.getExtras().getStringArrayList(
RecognizerIntent.EXTRA_SUPPORTED_OFFLINE_LANGUAGES);
}
}, null, 1234, null, null);
Than ôi, nó chưa bao giờ xảy ra.
Bạn có hai tùy chọn khác để cố gắng xử lý điều này một cách duyên dáng.
Trong trường hợp không chắc bạn chạy ứng dụng với quyền root, bạn có thể kiểm tra vị trí của /data/data/com.google.android.googlequicksearchbox/app_g3_models/
chứa tệp ngoại tuyến, được gắn nhãn khá thủ công theo ngôn ngữ của chúng.
Điều thứ hai liên quan đến việc biết khi nào người dùng cần lời nhắc để cài đặt các tệp ngoại tuyến bị thiếu.
Từ kinh nghiệm của tôi, lỗi nhận dạng của SpeechRecognizer.ERROR_SERVER
thường biểu thị điều này nhất, nhưng nó không phải là không dễ dàng.
@Override
public void onError(final int error) {
switch (error) {
case SpeechRecognizer.ERROR_SERVER:
// TODO - prompt to install offline files
break;
}
}
Khi được phát hiện, bạn có thể hướng dẫn người dùng đến màn hình cài đặt chính xác.
public static final String PACKAGE_NAME_GOOGLE_NOW = "com.google.android.googlequicksearchbox";
public static final String ACTIVITY_INSTALL_OFFLINE_FILES = "com.google.android.voicesearch.greco3.languagepack.InstallActivity";
public static boolean showInstallOfflineVoiceFiles(@NonNull final Context ctx) {
final Intent intent = new Intent();
intent.setComponent(new ComponentName(PACKAGE_NAME_GOOGLE_NOW, ACTIVITY_INSTALL_OFFLINE_FILES));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
ctx.startActivity(intent);
return true;
} catch (final ActivityNotFoundException e) {
} catch (final Exception e) {
}
return false;
}
Sử dụng các giá trị mã hóa cứng như thế này, tất nhiên là không lý tưởng, nhưng cả hai đều không phải là tình huống này!
Khi bạn đã rối tung với tất cả những điều trên và nghĩ rằng bạn có một giải pháp tạm thời tốt - hãy suy nghĩ lại! Bất kể người dùng đã cài đặt đúng các tệp ngoại tuyến bị thiếu hay chưa, rất có khả năng nó vẫn không hoạt động .....
My answer here mô tả quy trình Tôi vẫn phải hướng dẫn người dùng của mình. Nó rất bực bội.
Cuối cùng thêm một lỗi nữa để đưa vào danh sách kết hợp - RecognitionListener.onError(int) có thể được ném khi không có lỗi. Kiểm tra gist của tôi from the answer here để sử dụng BugRecognitionListener
để bạn có thể kiểm tra các cuộc gọi lại đang được gửi theo đúng thứ tự và bỏ qua những người không được. Điều này vẫn còn là một vấn đề, mặc dù câu trả lời của tôi cho thấy một bản sửa lỗi trong bản phát hành trước.
Điều trên sẽ khiến bạn bận rộn! Chúc may mắn ....
Không, câu hỏi đó là "cách sử dụng lời nói ngoại tuyến", công cụ phát biểu ngoại tuyến, nhưng bạn cần tải xuống tệp ngôn ngữ, câu hỏi này là "cách phát hiện và tải xuống/cài đặt tệp ngôn ngữ" – James
Tôi yêu cầu nâng cao điều này một thời gian dài trước đây, mà bây giờ được đánh dấu là lỗi thời. https://code.google.com/p/android/issues/detail?id=59145 – brandall
thử mã này từ @gregm [tại đây] (http://stackoverflow.com/a/10548680/4394827) –