我正在构建一个使用AsyncTask的应用程序,以便在执行网络操作时显示进度条(Google翻译).然而,问题是我无法判断它是否正常工作,因为网络速度太快,并且一启动就完成了运行操作.那么是否有一种模拟慢速网络的方法,以便我可以判断进度条在等待操作完成时是否实际运行(可见)?在创建Android模拟器时,我遇到了网络选项.但是,有这么多的缩写,我仍然无法理解什么表明网络连接速度慢,我仍然不确定这是否应该如何设置慢速网络连接.
提前致谢!
我正在使用Espresso和UIAutomator来编写我的测试用例.我正在测试外部存储权限,当它被拒绝时以及何时被允许.我有不同的测试用例,都需要在测试用例开始时撤销权限.但是,某些测试用例应该并且确实会导致授予权限,因此我需要在执行下一个测试时撤消权限.我一直在搜索,我遇到的最接近的事情是使用pm管理器执行adb shell命令来撤销权限.但是,通过这样做,我将收到以下错误,由于"进程崩溃",Instrumentation运行失败.有没有什么办法可以确保在每个测试用例开始时撤销权限?如果没有,如何解决有关测试权限的问题?提前谢谢你的帮助!
这是我目前在每个测试用例之前撤消权限的代码片段(不起作用):
@Before
public void setUp() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getInstrumentation().getUiAutomation().executeShellCommand(
"pm revoke " + getTargetContext().getPackageName()
+ " android.permission.WRITE_EXTERNAL_STORAGE");
}
}
Run Code Online (Sandbox Code Playgroud)
尝试使用上面的代码段撤消权限时出现相应的错误消息:
Test failed to run to completion. Reason: 'Instrumentation run failed due to 'Process crashed.''.
Run Code Online (Sandbox Code Playgroud)
android android-testing android-permissions android-espresso android-uiautomator
我正在使用Android的TextToSpeech类.一切正常.但是,有些语言/语言环境默认情况下未安装但由TTS引擎支持,我无法捕获丢失语音数据的状态.
在互联网开启的情况下,当我尝试将语言设置为尚未下载语音数据的新语言环境时,它只需下载语音数据并正常/成功地执行说话方法.
但是,在关闭互联网的情况下,当我尝试将语言设置为尚未下载其语音数据的新语言环境时,它会尝试下载语音数据.但是没有互联网,它只是在所选语言环境的"语言和输入"下的"TTS语音数据"设置屏幕上显示"下载",没有任何进展.正如预期的那样,由于未下载语音数据,因此说话方法不起作用.当发生这种情况时,我认为TTS方法setLanguage/isLanguageAvailable将返回LANG_MISSING_DATA以便我捕获此状态,但是,它只返回LANG_COUNTRY_AVAILABLE.情况如下图所示:
我希望能够检测到所选语言环境的语音数据何时未下载/丢失,并提供toast消息或直接用户下载它.我见过几个职位建议使用采用isLanguageAvailable这样的一个.我还查看了android文档,似乎isLanguageAvailable的返回值应该用LANG_MISSING_DATA捕获丢失语音数据的状态.
我还尝试使用ACTION_CHECK_TTS_DATA发送一个intent,作为检查丢失数据的另一种方法,如我链接的Android文档中所建议的那样.但是,resultCode再次没有捕获/指示语音数据丢失(CHECK_VOICE_DATA_FAIL),而是返回CHECK_VOICE_DATA_PASS.
在这种情况下,如何捕获可用/支持的语言/语言环境的状态,语音数据丢失?我也很好奇为什么CHECK_VOICE_DATA_PASS和LANG_MISSING_DATA不是返回的值.当语音数据丢失时,它不应该返回这些值吗?谢谢!下面是我尝试在没有下载语音数据的语言环境中使用setLanguage和isLanguageAvailable时的返回值(0和1是日志中显示的方法的返回值,-1是对应于丢失语音的方法数据):
我有一个GoogleTranslate.java文件,其中包含一个扩展AsyncTask的类GoogleTranslate.此任务的目的是执行Google翻译.
我有另一个类MyVocab,它允许用户在警告对话框中输入要翻译的单词.因此,只需单击警告对话框按钮,即可通过调用GoogleTranslate类将该单词翻译为所需语言.但是,当我将进度条从MyVocab传递到GoogleTranslate时,它不起作用.当操作正在运行时(可观察的时间量),进度条不会显示.我在onPreExecute中将进度条设置为VISIBLE,并在onPostExecute中将其设置为GONE.
我想知道是不是因为我在两个不同的java文件中有GoogleTranslate和MyVocab,因为我看到的大多数示例都有异步类和在同一个java文件中调用它的类.请告诉我,如果有什么我做错了导致这个问题.
这是相关的代码:
GoogleTranslate.java
public class GoogleTranslate extends AsyncTask<String, Void, String>{
private ProgressBar mProgressBar;
public GoogleTranslate(ProgressBar progressBar) {
super();
mProgressBar = progressBar;
}
@Override
protected void onPreExecute() {
mProgressBar.setVisibility(View.VISIBLE);
}
@Override
protected void onPostExecute(String s) {
mProgressBar.setVisibility(View.GONE);
}
@Override
protected String doInBackground(String... params) {
String vocab = params[0];
String source = params[1];
String target = params[2];
String sourceQuery = "";
String targetQuery = "&target=" + target;
// "" means its
if (!source.equals("Detect Language")) {
sourceQuery = "&source=" + source; …Run Code Online (Sandbox Code Playgroud) 对于我的Android项目,我有一个列表视图,其中包含每个项目的复选框.使用CursorAdapter类从SQLite数据库加载数据.但是,每当我滚动时,复选框位置将被移动并被移动到列表视图的下一部分.我该如何解决这个问题? 我的CheckBox问题的GIF 这是我的游标适配器类:
public class VocabCursorAdapter extends CursorAdapter {
private static final int DIFFICULT = 0;
private static final int FAMILIAR = 1;
private static final int EASY = 2;
private static final int PERFECT = 3;
public VocabCursorAdapter(Context context, Cursor c, int flags) {
super(context, c, 0);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.item_vocab, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// Find fields to populate in …Run Code Online (Sandbox Code Playgroud) checkbox android listview android-cursoradapter android-checkbox
我正在为我的 Android 应用实现导入功能。我想让用户选择他们想要从他们设备上的外部存储(确切地说是下载目录)和其他在线文件存储(如 DropBox 和 Google Drive)导入的文件。
我实现了它并在一个模拟器和两个安卓设备上进行了测试。当我在模拟器上测试它时,Android 版本 6.0,因为它没有安装 DropBox 和 GoogleDrive,我看到了我所期待的,它能够从下载目录中选择一个文件:

当我在 Google Pixel 手机 Android 版本 7.1.2 上对其进行测试时,一切都按我的预期工作。我可以从下载目录、Google Drive 和 DropBox 中选择一个文件:

但是,当我在三星 Galaxy 4 设备 Android 版本 5.0.1 上对其进行测试时,我可以从 Google Drive 和 Dropbox 中选择一个文件,但是我无法从我的下载目录中选择一个文件:

这是我选择文件的代码:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/*");
startActivityForResult(intent, GET_FILE_RESULT_CODE);
Run Code Online (Sandbox Code Playgroud)
请让我知道我可以做些什么来解决这个问题。谢谢!
android android-intent android-file android-external-storage android-storage
我有一个使用 Google Translate API 的 Android 应用程序。一切都很好,包括当我尝试将包含撇号的短语(如“我们已经吃过”)翻译成西班牙语时。
但是,当我应该返回的翻译结果包含撇号时会出现问题。例如,当我将一个西班牙语短语“A ver”翻译成英语时,它返回带有“;”的“Let's see” “9”之后。似乎每当我有一个应该返回撇号的短语时,它都会返回带有“;”的“'” “9”之后。(不将“;”放在“9”之后,因为它会被stackoverflow转换为撇号)。
我可以想办法解决。得到翻译结果后,我可以匹配字符串“"'" + ";" 并将其替换为撇号。
但是,我不觉得这是我应该接近它的方式。用户实际上不太可能输入“'”作为翻译的输入,但是像这样硬编码手动转换似乎可能会导致问题。我很想听听你对此的看法。
请让我知道我应该如何解决/解决这个问题。
谢谢!