小编an0*_*00b的帖子

如何从Git跟踪中排除R.java(事后)?

我认为我非常熟悉如何使用.gitignore(这对我来说排除顶级目录仍然很有用),但我现在发现R.java我的应用程序中使用的各个库中的多个文件正在被跟踪,我想停止跟踪它们.

我尝试将该行添加R.java.gitignore顶级目录中,但git status不断将其报告为已修改.

然后我尝试将该行添加*/gen/.gitignore顶级目录中,但git status仍然将它们报告为已修改.

告诉git停止跟踪它们的诀窍是什么?

git gitignore

6
推荐指数
1
解决办法
1328
查看次数

Java中的模块化:顶级与嵌套类

我读过的Java教程,比如使用嵌套类来演示概念,特性或用法.

这使我最初实现了一个我创建的示例项目:主活动类中有很多嵌套类.

它工作,但现在我有一个可怕的单片.java文件.我发现它有点不方便,我现在打算打破多个.java文件/类.

然而,在我看来,有时可能有理由从他们的封闭课堂上上课.

如果是这样,考虑到模块化和易维护性,保持模块大的原因是什么?

是否存在将嵌套类转换为顶级类是不切实际(甚至不可能)的情况?换句话说,是否只有嵌套类可以满足某些功能?

java modularity nested

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

TTS输出始终为A2DP

我的Android教程声明我可以明确告诉TTS引擎使用哪个流:

对于音乐播放:

params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_MUSIC));
Run Code Online (Sandbox Code Playgroud)

并拨打电话:

params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_VOICE_CALL));
Run Code Online (Sandbox Code Playgroud)

我的理解是,音频路由到蓝牙耳机的作品,从而STREAM_MUSICA2DP(在Android的蓝牙设置又名"媒体音频")和STREAM_VOICE_CALLHSP(在Android的蓝牙设置又名"手机音频").

但不管我是否使用STREAM_MUSICSTREAM_VOICE_CALL在我的小应用程序中,音频总是出于某种原因A2DP.

我做错了什么?有没有办法将TTS输出路由到耳机的HSP配置文件?

android bluetooth text-to-speech

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

将两个立体声通道组合成单声道?

我梳理了AudioManager,找不到任何API或设置来从立体声切换到单声道(两个声道的信号都是两个立体声声道的总和).

完全可以在Android中实现这一点吗?

audio android

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

只调用一次的代码块 - 值得拥有自己的方法吗?

通过观察各种Android应用程序的源代码(不是我编写的),我注意到了将某些代码片段放入自己的方法中的模式,尽管实际上没有任何代码重用,因为这些方法只在整个过程中被调用一次应用.

到目前为止,我有一个经验法则,规定如果在应用程序代码中使用两次或更多代码,那么它就有其自身的方法,仅仅是为了消除代码冗余.

但是看到那些整齐地将代码块分解成自己的方法(以及自己的方法调用开销),我开始说,也许我错过了一些东西.

除了用于文档目的之外,还有什么其他原因可以证明只将4行代码(只调用一次!)放入自己的方法中?

java code-reuse refactoring code-readability

5
推荐指数
2
解决办法
596
查看次数

即使包不可用,TextToSpeech.setEngineByPackageName()也会返回成功

在通过这个答案设法使TextToSpeech.setEngineByPackageName()工作之后,我现在遇到了"相反"的问题:

tts.setEngineByPackageName("com.ivona.tts.voicebeta.eng.usa.kendra");始终返回TextToSpeech.SUCCESS,即使该设备中根本没有安装该软件包.

由于设备上没有该软件包,TTS会继续使用Android的默认设置pico,这是预期的,但我不明白为什么要setEngineByPackageName()返回SUCCESS.

怎么会这样?

android text-to-speech

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

在什么情况下TextToSpeech.isSpeaking()返回true?

文件说:"TTS引擎检查是否忙讲."

但我只是实现一个呼叫isSpeaking()中的onUtteranceCompletedListener,在那里我有至少10周悬而未决的言论和没有人做我收到true.

假设isSpeaking()实际上按照文档记录,我必须得出结论,我正在调用它.

调用TextToSpeech.isSpeaking()返回有效结果的要点是什么?

android text-to-speech

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

getSpeechRate()?(或如何知道当前设置的TTS速率)

TextToSpeech有一种设置语音速率的方法:setSpeechRate()。但是它没有查询当前速度的相反方法。

有没有办法向系统查询值?

android text-to-speech

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

"构造函数不是继承的"究竟意味着什么?

我在Java中读到"构造函数不是继承的".

另一方面,我还读到如果我没有显式调用super,Java会自动调用没有参数的超类构造函数(在这种情况下必须存在这样的构造函数).

是不是自动调用超类构造函数(没有参数)的继承形式?

"构造函数不是继承的"究竟意味着什么?

java

4
推荐指数
2
解决办法
499
查看次数

Activity类型中的方法runOnUiThread(Runnable)不适用于参数(void)

我试图在onUtteranceCompleted()中从非UI线程创建一个对话框:

runOnUiThread(
    new Thread(new Runnable() {
      public void run() { MyDialog.Prompt(this); }
    }).start());
Run Code Online (Sandbox Code Playgroud)

Prompt()是MyDialog类的一个简单的静态方法:

  static public void Prompt(Activity activity) {
    MyDialog myDialog = new MyDialog();
    myDialog.showAlert("Alert", activity);     
  }
Run Code Online (Sandbox Code Playgroud)

问题是,我正在尝试做两件错误:

  1. Activity类型中的方法runOnUiThread(Runnable)不适用于参数(void)
  2. MyDialog类型中的方法Prompt(Activity)不适用于参数(new Runnable(){})

通过将对话框创建推迟到UI线程,我想要的只是"做对了",但似乎我遗漏了一些基本的东西.

我缺少什么,如何完成我想要实现的看似简单的任务?

android dialog thread-safety ui-thread runnable

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