我刚刚StringBuilder第一次遇到并且感到惊讶,因为Java已经有一个非常强大的String类允许追加.
为什么选择String二等?
我在哪里可以了解更多信息StringBuilder?
我设法很好地重构了我的应用程序,因此,除了派生的Activity类中的一些方法之外,所有内容都在库项目中.
它工作得很漂亮,除了Eclipse的控制台(不是 LogCat!)发出以下错误消息:
[2011-06-13 19:54:08 - MyLibrary] Could not find MyLibrary.apk!
Run Code Online (Sandbox Code Playgroud)
我清理了两个项目(库和应用程序),重新启动了Eclipse,重新构建了项目,但是这个奇怪的错误消息仍然存在.
这个错误信息是什么意思?(特别是在一切似乎都运行良好的情况下)
我怎么摆脱它?
更新:我尝试删除项目,然后根据下面的建议重新导入它.它没有帮助.然后我发现这个线程帮助我意识到我<uses-library>在应用程序的AndroidManifest.xml中引用了MyLibrary.我删除了它,清理了项目并重建了.问题依然存在.
我现在怀疑这是"真正的问题",例如我对某些路径或其他东西的配置错误.会是什么呢?
我知道adb install如果它是一个不同的构建类型(即调试与发布),它将不会替换现有的包.
每当我运行调试会话时,Eclipse也会成功替换调试apks.
但是,当我尝试用另一个版本apk(相同的包名!)adb install替换现有版本 apk时,我收到一条失败消息:
adb install myapp-release.apk
pkg: /data/local/tmp/myapp-release.apk
Failure [INSTALL_FAILED_ALREADY_EXISTS]
745 KB/s (34310 bytes in 0.044s)
Run Code Online (Sandbox Code Playgroud)
这不应该工作吗?我错过了什么?
获取内容的上下文onClick(View view),按钮的回调onClickListener()很容易:
view.getContext()
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何获得上下文中onClick(DialogInterface v, int buttonId),对于回调对话框的onClickListener
public class MainActivity extends Activity implements android.content.DialogInterface.OnClickListener
Run Code Online (Sandbox Code Playgroud)
这可能吗?
在属于Library项目的类中,我调用:
webview.loadUrl("file:///android_asset/info.html", null);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这只有在我将文件info.html 复制到Application的项目资产文件夹中时才有效.
有没有办法告诉Android库代码:"在库的资源文件夹中查找此文件,而不是在应用程序的资源文件夹中"?
我看到了很多好的旧有用的方法,甚至整个类都被"弃用和过时".
但是用于调用这些方法的代码仍然有效.那么,作为Android应用程序开发人员,这对我意味着什么呢?
当没有提供替代方案时,这尤其令人困惑,例如WebView.PictureListener.html#onNewPicture.
在我正在进行的学习过程中(这次是对话框),我发现这有效:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
Run Code Online (Sandbox Code Playgroud)
虽然以下方法不起作用(运行时因WindowManager $ BadTokenException而失败):
AlertDialog.Builder builder = new AlertDialog.Builder(this.getApplicationContext());
Run Code Online (Sandbox Code Playgroud)
我不明白为什么,因为AlertDialog.Builder 的构造函数被定义为接受Context作为参数,而不是Activity:
public AlertDialog.Builder(Context context)
构造函数使用此构建器的上下文及其创建的AlertDialog.
我错过了什么?
android android-context android-alertdialog android-activity
不久前,我发现playEarcon() 永远不会产生 onUtteranceCompleted().
在我刚才解释认为文件的时间"时的讲话被称为合成为" onUtteranceCompleted()暂时不适用的耳标,因为,一个耳标是不是真的TTS综合后的结果.
但是再看看Android的源代码,我根本找不到能够证明我解释的解释.
关于我的测试夹具的一些事实:
onUtteranceCompleted()总是到达earcon之前的话语ID.那句话是一种普通的TTS话语,而不是一种耳语.onUtteranceCompleted()因为那个earcon 永远不会出现.这是非常一致和可重复的行为.深入研究TtsService源代码,似乎只有2种方法可能会影响到达(或缺席)onUtteranceCompleted():
如果你检查那个代码,你会看到第三个候选者,TtsService.getSoundResource()被排除(由于我的earcon缺乏onUtteranceComplete),因为上面的事实#2:earcon总是在玩,因此getSoundResource()不可能返回null.
使用相同的逻辑,第一个候选者TtsService.processSpeechQueue()也可以排除,对于相同的事实#2:earcon总是在播放,因此总是执行以下2个关键语句:
1108 mPlayer.setOnCompletionListener(this);
...
1111 mPlayer.start();
Run Code Online (Sandbox Code Playgroud)
所以,我们只剩下第二个候选人,TtsService.onCompletion(),作为一个playEarcon() 永远不会产生的 原因的可能解释onUtteranceCompleted():
public void onCompletion(MediaPlayer arg0) {
// mCurrentSpeechItem may become null if it is stopped at the same
// time it completes.
SpeechItem currentSpeechItemCopy = mCurrentSpeechItem;
if (currentSpeechItemCopy != null) {
String …Run Code Online (Sandbox Code Playgroud) android text-to-speech onutterancecompleted android-mediaplayer
在继续开发我的应用程序并在真实手机上进行测试的同时,我需要在同一部手机上安装它的发布版本,以用于演示目的(由于没有日志,发布版本的响应速度更快).
问题是,在Android中的同一设备上共存两个应用程序的唯一方法是使用不同的包名.
但包名称需要重新分解和大量传播手动修复...更不用说这会混淆版本控制......
理想情况下,Eclipse + ADT将允许附加一个修饰符变量,该变量将自动为调试/发布生成不同的包名称并允许这种共存,但我找不到任何允许这样做的机制.
你知道如何解决这个问题吗?
欢迎创意解决方案和想法.
我有这个ACTION_MEDIA_BUTTON的广播接收器,它实际上适用于Android 2.x和Android 4.1,但由于一些奇怪的原因,在Android 2.x(仅限)上,我得到每个甚至两次(只需单击暂停按钮,当然):
public class RemoteControlReceiver extends BroadcastReceiver {
private static long prevEventTime = 0;
@Override
public void onReceive(Context ctx, Intent intent) {
if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
long curEventTime = event.getEventTime();
if (event != null && (event.getAction() == KeyEvent.ACTION_UP) /*&& (curEventTime != prevEventTime)*/) {
int keycode = event.getKeyCode();
switch (keycode)
{
case KeyEvent.KEYCODE_MEDIA_NEXT:
Log.i(TAG, "KEYCODE_MEDIA_NEXT");
break;
case KeyEvent.KEYCODE_HEADSETHOOK:
Log.i(TAG, "KEYCODE_HEADSETHOOK" + " " + curEventTime + " <> " + …Run Code Online (Sandbox Code Playgroud)