小编Cha*_* Li的帖子

在Android模拟器上模拟慢速网络

我正在构建一个使用AsyncTask的应用程序,以便在执行网络操作时显示进度条(Google翻译).然而,问题是我无法判断它是否正常工作,因为网络速度太快,并且一启动就完成了运行操作.那么是否有一种模拟慢速网络的方法,以便我可以判断进度条在等待操作完成时是否实际运行(可见)?在创建Android模拟器时,我遇到了网络选项.但是,有这么多的缩写,我仍然无法理解什么表明网络连接速度慢,我仍然不确定这是否应该如何设置慢速网络连接.

提前致谢!

android android-emulator android-asynctask

19
推荐指数
1
解决办法
1万
查看次数

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

13
推荐指数
3
解决办法
3435
查看次数

Android TTS检查支持的区域设置是否缺少/未下载语音数据

我正在使用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是对应于丢失语音的方法数据):在此输入图像描述

android text-to-speech android-intent

13
推荐指数
1
解决办法
1220
查看次数

在AsyncTask操作期间不显示ProgressBar

我有一个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 android-progressbar android-asynctask

11
推荐指数
2
解决办法
1896
查看次数

使用CursorAdapter维护listview中的复选框状态

对于我的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

5
推荐指数
1
解决办法
1508
查看次数

ACTION_GET_CONTENT 意图不显示外部存储

我正在为我的 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

5
推荐指数
1
解决办法
2908
查看次数

使用 Google Translate API for Android 时如何返回撇号?

我有一个使用 Google Translate API 的 Android 应用程序。一切都很好,包括当我尝试将包含撇号的短语(如“我们已经吃过”)翻译成西班牙语时。

但是,当我应该返回的翻译结果包含撇号时会出现问题。例如,当我将一个西班牙语短语“A ver”翻译成英语时,它返回带有“;”的“Let's see” “9”之后。似乎每当我有一个应该返回撇号的短语时,它都会返回带有“;”的“'” “9”之后。(不将“;”放在“9”之后,因为它会被stackoverflow转换为撇号)。

我可以想办法解决。得到翻译结果后,我可以匹配字符串“"'" + ";" 并将其替换为撇号。

但是,我不觉得这是我应该接近它的方式。用户实际上不太可能输入“'”作为翻译的输入,但是像这样硬编码手动转换似乎可能会导致问题。我很想听听你对此的看法。

请让我知道我应该如何解决/解决这个问题。

谢谢!

android google-api google-translate

3
推荐指数
1
解决办法
1456
查看次数