0

我正在使用 firebase 为 android 开发一个翻译应用程序。我发现了一个奇怪的行为,这个应用程序在我的 android 设备上运行良好,但在模拟器中却不行。

AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

构建.gradle:

implementation'com.google.firebase:firebase-core:15.0.2'
implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0'
implementation 'com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7'
implementation 'com.google.firebase:firebase-ml-natural-language-translate-model:20.0.8'

翻译器.java:

 public void translateText(int fromLanguage, int toLanguage, String input, Context context){

    FirebaseTranslatorOptions options = new FirebaseTranslatorOptions.Builder()
            .setSourceLanguage(fromLanguage)
            .setTargetLanguage(toLanguage)
            .build();

    FirebaseTranslator universalTranslator = FirebaseNaturalLanguage.getInstance().getTranslator(options);
    FirebaseModelDownloadConditions conditions = new FirebaseModelDownloadConditions.Builder()
            .requireWifi()
            .build();



    universalTranslator.downloadModelIfNeeded(conditions).addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Toast.makeText(context, "Please wait language modal is being downloaded.", Toast.LENGTH_LONG).show();
            universalTranslator.translate(input).addOnSuccessListener(new OnSuccessListener<String>() {
                @Override
                public void onSuccess(String s) {
                    mTranslatedText = s;
                    Toast.makeText(context, "Success", Toast.LENGTH_SHORT).show();
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(context, "Fail to translate", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Toast.makeText(context, "Fail to download language modul", Toast.LENGTH_SHORT).show();
        }
    });
    return;
}

Activity_1.java:

translator.translateText(languageFromCode,languageToCode, textToTranslate, context);

问题是,当我在我的真实设备上安装这个应用程序时,它会正常工作。当语言模型在真实设备上不可用时,它会自动下载并在几秒钟后使用。但是当我在模拟设备上运行完全相同的应用程序时,语言模型似乎没有正确下载。这是我已经想通的:

  • 当语言模型不可用时,显然存在互联网流量,其中模拟器会下载一些东西。但是下载管理器中没有任何显示。
  • 互联网流量返回 0 后,应用仍然认为语言模型不可用。而且翻译不工作。
  • downloadModelifNeeded 的“addOnSuccessListener”和“addOnFailureListener”永远不会触发。所以没有吐司被生产出来
  • 大约 15 分钟后,模拟设备上的应用程序终于可以工作了,我可以翻译了,所以语言模型可用

所以这是我的问题:有谁知道,什么可能导致模拟器上出现这种奇怪的行为,以及为什么应用程序在模拟器中无法正常工作?

请记住,该应用程序在真实设备上运行良好。

4

0 回答 0