小编Dmi*_*ank的帖子

startForeground()不显示我的通知

我想让我Service在前台跑步.我尝试使用此示例(请查看" 在前台运行服务 "部分),但startForeground()实际上并未显示我的通知.并没有抛出异常.为了使它显示,我需要使用NotificationManager这里解释的那样.随着NotificationManager我的通知工作,但我不确定我Service的前景是在这个"无声"呼叫之后startForeground().

有什么不对?

编辑:我刚刚测试了这个应该演示的示例项目startForeground(),但它不起作用!我使用API​​ v7.0,我在模拟器和真实设备(SE Xperia Neo)上测试了它.通知不会出现.

EDIT2:如果我试着打电话,setForeground()那我就收到了警告setForeground: ignoring old API call.

我也尝试使用这里startForegroundCompat()描述的,但效果绝对相同.我按照这里的描述检查我的服务是否是前台服务,我发现我的服务不是前台服务.ActivityManager.RunningServiceInfo

service android foreground

48
推荐指数
2
解决办法
2万
查看次数

Android服务:onBind(Intent)和onUnbind(Intent)只调用一次

我有活动和服务.当Activity启动时,startService()即使Activity被销毁,它也会调用以使此服务处于活动状态,并bindService()与此服务进行通信.

bindService()返回true,mService.onBind()被调用,也ServiceConnection.onServiceConnected()被调用.一切都有效.

当我通过按Back键销毁我的Activity时,它会调用unbindService(),然后调用我的Activity mService.onUnbind().(我回来falseonUnbind().)

然后我重新开始这个活动,bindService()返回true,然后mService.onBind()叫!但也ServiceConnection.onServiceConnected()被召唤,一切都有效.

看起来Dalvik记得我onBind()上一次回​​来了什么,只是不再打电话onBind().当我再次破坏我的活动时,onUnbind()不会被召唤.

我可以多次绑定和取消绑定此服务到我的Activity,但是在我通过解除绑定和调用来销毁Service之前,不会再调用这些方法stopService().

在文档中,我无法找到对此行为的任何解释.相反,这个数字表明,onBind()onUnbind()应该叫每个客户绑定时间和取消绑定服务.此图可以在本开发指南的底部找到.

service binding android

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

使用Qt编译项目后,将文件复制到构建目录

我已经看到了几个建议,但没有任何真正对我有用的东西.我只需要将文件复制到所需的目标目录.

比如说,从这个回答:

install_it.path = %{buildDir}
install_it.files += %{sourceDir}/settings.ini

INSTALLS += install_it
Run Code Online (Sandbox Code Playgroud)

变量%{buildDir}%{sourceDir}应界定,以使这项工作.好吧,没问题%{sourceDir}:它只是..但我怎么能得到%{buildDir}

EDIT1

说,我my_project这里有一个项目:

/path/to/my_project

因此,释放的构建路径是这样的:/path/to/my_project-build-Desktop-release,

调试构建路径是这样的: /path/to/my_project-build-Desktop-debug

我有文件要复制到目标目录: /path/to/my_project/copy_to_install_dir

因此,我希望在发布版本时/path/to/my_project/copy_to_install_dir将所有文件复制到/path/to/my_project-build-Desktop-release.而且,调试构建的方式相同.

我找不到包含完整目标路径的变量,即/path/to/my_project-build-Desktop-release用于调试构建.

以防万一:我使用Windows,但无论如何我正在寻找跨平台解决方案.

EDIT2

准确的解决方案,面向未来的读者:

install_it.path = $$OUT_PWD
install_it.files = copy_to_install_dir/*

INSTALLS += \
    install_it
Run Code Online (Sandbox Code Playgroud)

qt qmake

30
推荐指数
3
解决办法
3万
查看次数

如何在不添加换行符的情况下将文本附加到QPlainTextEdit,并在底部保持滚动?

我需要将文本追加到QPlainTextEdit不添加新行的文本,但是这两种方法appendPlainText(),并appendHtml()实际上增加了新的段落.

我可以手动执行以下操作QTextCursor:

QTextCursor text_cursor = QTextCursor(my_plain_text_edit->document());
text_cursor.movePosition(QTextCursor::End);

text_cursor.insertText("string to append. ");
Run Code Online (Sandbox Code Playgroud)

这是有效的,但如果它在追加之前我还需要保持在底部滚动.

我试图从Qt的源文件副本的逻辑,但我坚持就可以了,因为那里实际上QPlainTextEditPrivate是使用类,我找不到这样做没有它的方法:比如说,我没有看到的方法verticalOffset()QPlainTextEdit.

实际上,这些来源包含许多奇怪的东西(至少在初看起来),我不知道如何实现它.

以下是源代码append():http://code.qt.io/cgit/qt/qt.git/tree/src/gui/widgets/qplaintextedit.cpp#n2763

c++ qt newline qplaintextedit

28
推荐指数
3
解决办法
5万
查看次数

Qt:在表单上添加文件选择字段(QLineEdit和"浏览"按钮)

我需要QLineEdit在表单上显示"浏览"按钮.当用户单击按钮时,QFileDialog应该打开,依此类推.

这很常见,但我找不到现成的解决方案.我期望在Qt Designer中有一些小部件QFileSelect,或类似的东西,但没有发现类似的东西.

我应该手工实施吗?或者,这样做的正确方法是什么?

c++ qt qtgui qt-designer qfiledialog

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

Qt:从多个测试类中运行单元测试,并总结所有测试类的输出

Qt附带QTest,并且有一些文档:例如,官方教程.

但是,QTest鼓励您将单元测试组织为单独的可执行文件.有一个特殊的宏,它生成main():QTEST_MAIN()

说实话,我真的不喜欢这种方法:通常,一次运行所有测试更有用,以确保最近的更改没有破坏任何东西.有时,屏蔽某些测试或执行某些单独测试很有用,但这是一个例外,而不是规则.

所以,我想立刻运行所有测试.好的,我可以编写自己的main(),执行我想要的所有测试,比如说:

int main(int argc, char **argv)
{
   int status = 0;

   //-- run all tests
   {
      TestHTCodecISO14230 tc;
      status |= QTest::qExec(&tc, argc, argv);
   }

   {
      TestHTDataMsg tc;
      status |= QTest::qExec(&tc, argc, argv);
   }

   return status;
}
Run Code Online (Sandbox Code Playgroud)

它确实运行所有测试,但问题是我没有方便的所有测试摘要.比如说,对于上面的两个测试,我有两个单独的摘要:

********* Start testing of TestHTCodecISO14230 *********
Config: Using QtTest library 5.4.1, Qt 5.4.1 (i386-little_endian-ilp32 shared (dynamic) release build; by GCC 4.6.1)
PASS   : TestHTCodecISO14230::initTestCase()
PASS   : TestHTCodecISO14230::decode_summary() …
Run Code Online (Sandbox Code Playgroud)

c++ qt unit-testing qttest

15
推荐指数
1
解决办法
2195
查看次数

Android:更改WindowManager添加的ViewParams of View

我有叠加View管理WindowManager,就像在这个问题中一样.

简而言之,它看起来像这样:

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
my_view_layout_params = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
       WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
       PixelFormat.TRANSLUCENT);

wm.addView(my_view, my_view_layout_params);
Run Code Online (Sandbox Code Playgroud)

它工作,但如果我需要更改布局参数,我需要删除视图并再次添加它,如下所示:

wm.removeView(my_view);
wm.addView(my_view, my_view_layout_params);
Run Code Online (Sandbox Code Playgroud)

它看起来不是很漂亮.我试着这样做my_view.setLayoutParams(my_view_layout_params),但不幸的是它不起作用.我该怎么做?

android view layoutparams

12
推荐指数
2
解决办法
7768
查看次数

Swagger:通配符路径参数

我有一个API,允许传入任意路径,例如所有这些:

  • /api/tags
  • /api/tags/foo
  • /api/tags/foo/bar/baz

是有效的路径.我试着把它描述如下:

 /tags{tag_path}:
    get:
      parameters:
        - name: tag_path
          in: path
          required: true
          type: string
          default: "/"
Run Code Online (Sandbox Code Playgroud)

但是,https: //generator.swagger.io会在路径中对斜杠进行编码,因此它不起作用.那么有没有办法在Swagger中描述我的API?

swagger swagger-ui swagger-2.0

12
推荐指数
1
解决办法
3420
查看次数

C++在初始化程序中指定数组索引,如C

我之前使用过C(嵌入式东西),我可以像这样初始化我的数组:

int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
Run Code Online (Sandbox Code Playgroud)

即我可以在初始化程序中指定索引.目前我正在学习Qt/C++,我无法相信这在C++中是不受支持的.

我有这个选项:-std=gnu++0x,但无论如何它不受支持.(我不知道它是否在C++ 11中受支持,因为Qt在gcc 4.7.x中工作有问题)

那么,它真的不支持C++吗?或者也许有办法启用它?

UPD:目前我想初始化const数组,所以std::fill不行.

c c++

10
推荐指数
2
解决办法
4390
查看次数

Android:当Dalvik杀死此活动时,不会调用Activity.onDestroy()

我很困惑Activity.onDestroy().当我的Activity被销毁时,我需要释放一些资源,但是当我按下"后退"键时,似乎调用了onDestroy(),但是当我的Activity被Dalvik杀死时却没有.我只是通过添加日志来测试它:

Log.v("my_tag", "onDestroy() called");

和onCreate()方法一样:

Log.v("my_tag", "onCreate() called");

然后我开始我的活动,我在日志中看到:onCreate() called.我按"返回"键然后再次启动活动,然后我看到:

onDestroy() called
onCreate() called 
Run Code Online (Sandbox Code Playgroud)

然后我按"Home"键再次转到我的Activity,日志不会改变.好的,这里.

然后我再次按"Home"键并启动一些非常"重"的应用程序.在日志中没有任何关于onDestroy(),但当我再次启动我的Activity时,我在日志中看到:onCreate() called!因此,没有调用onDestroy(),但我的Activity被杀了.怎么了?

android ondestroy android-activity

9
推荐指数
1
解决办法
4159
查看次数