我正在开发一个应用程序,只要收到短信,就需要运行一些代码(网络).
在API 25和更低版本中它很好,我receiver在Manifest文件中注册了一个隐式文件,并在扩展的指定类中启动我的服务BroadcastReceiver.但是在API 26中,您无法注册android.provider.Telephony.SMS_RECEIVED,receiver因为它不起作用.
来自Android文档:
注意:如果您的应用程序的目标是API级别26或更高级别,则不能使用清单来声明隐式广播的接收者(特定于您的应用程序的广播),除了一些免于该限制的隐式广播.在大多数情况下,您可以使用预定作业.
我在媒体上看过几篇像这样的文章.有喜欢的解决方案,JobScheduler或者Explicit Receiver,但是第一个被用于网络状态的变化,我无法找到一个方法来触发任务SMS_RECEIVED的事件,第二个是有效的,直到你的活动启动并运行.
由于我的应用程序的性质,我需要监听传入的短信,无论应用程序是否正在运行.如何在API 26+中做到这一点?
编辑
也许Android网站上的JobInfoBuilder doc中的代码可以提供帮助.它监视设备上照片的变化,并在更改时启动作业.但是我找不到合适的Uri用短信做同样的事情(甚至不确定是否有可能通过短信监听短信ContentObserver)
我正在尝试构建一个javafx应用程序,在其中我需要响应鼠标移动和点击,就像射击时在反恐精英中发生的情况一样。但问题是,当我按下鼠标按钮时,它不会再响应鼠标移动,直到我释放鼠标按钮。我希望他们两个能够并行工作。我尝试在单独的线程中设置侦听器,但它不起作用。这是枪指针的图像。
Image image = new Image("/pointer.png"); // a 25*25 PNG icon
ImageView imageView = new ImageView(image);
scene.setCursor(Cursor.NONE);
Run Code Online (Sandbox Code Playgroud)
进而 :
scene.setOnMouseMoved(e -> {
imageView.setX(e.getX());
imageView.setY(e.getY());
});
scene.setOnMousePressed(e -> Toolkit.getDefaultToolkit().beep());
Run Code Online (Sandbox Code Playgroud)
我还尝试将它们放在单独的线程中,它也不起作用,但如果它确实存在另一个问题,我无法更改另一个线程中 javafx 组件的坐标,并且我收到此错误 - 即使它不会导致出现错误,它将无法工作:
java.lang.IllegalStateException: Not on FX application thread
scene.setOnMouseMoved(e -> {
Thread thread = new Thread() {
@Override
public void run() {
imageView.setX(e.getX()); // here i cannot do stuff related
imageView.setY(e.getY()); // to javafx components
}
};
thread.start();
});
scene.setOnMousePressed(e -> {
Thread thread = new Thread() {
@Override …Run Code Online (Sandbox Code Playgroud) 简洁版本:
标题基本上。换句话说,如果 PostgreSQL 查询以“SELECT”开头,那么可以安全地假设该查询是只读的,即不更改数据库中的任何内容吗?
详细版本:
我通过将 READ 查询分派到只读副本实例来扩展面向对象的多组件应用程序的 PostgreSQL 数据库。应用程序中的每个组件都负责构建其查询,但所有查询最终都在一个组件中分派到数据库执行。我不希望其他组件处理区分读取查询和非读取查询的任务。我只希望负责查询处理的组件来处理它。因此,我正在寻找一种方法来检测只读查询并将它们分派到只读副本数据库而不是主数据库以平衡主数据库上的负载。
我当前的解决方案是检查查询是否以“SELECT”开头,如果是,则将其标记为只读并安全地将其分派到只读副本数据库。我做错了吗?