小编Jav*_*ano的帖子

即使使用Lock,Wifi也会睡觉

摘要:即使获得wifi锁定,当手机使用电池运行时,WiFi会在一段时间后断开连接.

我已经使用启动线程的按钮将问题简化为单个活动.它只发送100.000个字符串到PC上运行的echo服务器(每100ms一个字符串).见下面的代码.我可以通过WireShark查看流量,并且echo服务器也会显示字符串.注意在开始发送之前(当然是在发布之后)获取WiFi和电源锁.

但是,当手机使用电池运行并且用户关闭手机时,它会持续发送字符串一段时间,然后WiFi断开连接,手机甚至不响应ping.断开连接需要600到6000秒(数字是那么圆,所以我认为它们很重要).

它在A/C连接时非常有效,所以我猜它与电源管理有某种关系.

为了测试它,我只需启动活动,启动echo服务器,启动WireShark,按"开始"按钮(android:onClick="doStart"),阻止手机并将其放在桌面上.我去吃午餐或者其他什么,经过600-6000s我可以看到WireShark上的tx错误,echo服务器已经停止接收流量而手机没有响应ping.

手机是2.2,WiFi政策设置为"15米后睡觉".

package Odroid.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Date;

import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.PowerManager;
import android.view.View;
import android.widget.Button;

public class Test extends Activity {
  PowerManager _powerManagement = null;
  PowerManager.WakeLock _wakeLock = null;
  WifiManager.WifiLock _wifiLock = null;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
  }

  public void doStart(View v) {
    DoerThreadFake t = …
Run Code Online (Sandbox Code Playgroud)

android wifi

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

tomcat7:无法加载JDBC驱动程序类[com.mysql.jdbc.Driver]

我在stackoverflow上看到了几个类似的问题,但它们并没有解决我的问题.这个特别有用,因为它指向官方tomcat文档 ,特别是本节.

简而言之,提供的解决方案是:tomcat需要将jdbc数据库驱动程序复制到$CATALINA_HOME/lib,因为它不会找到它们WEB-INF/lib/.好吧,但它仍然不适合我,我变得疯了.

让我们看看您是否可以提供任何进一步的想法.

环境是Windows XP,Tomcat7,Eclipse Indigo,Java6和Spring3.

mysql-connector 已被复制到 $CATALINA_HOME/lib

C:\>dir "c:\Program Files\Apache-Tomcat-7.0.12\lib"\mysql*
[...]
/2012  13:39           877.094 mysql-connector-java-5.1.21.jar
[...]
C:\>
Run Code Online (Sandbox Code Playgroud)

您可能知道Eclipse的Tomcat集成为其部署(CATALINA_BASE)创建了一个特定于WTP的目录,所以我也在那里复制了mysql-connector(我没有尝试过使用mysql-conector.jarin CATALINA_HOME,in CATALINA_BASE和in两者):

C:\>dir c:\Share\genesis\wsEclipse-indigo\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\lib
[...]
29/08/2012  13:39           877.094 mysql-connector-java-5.1.21.jar
[...]
C:\>
Run Code Online (Sandbox Code Playgroud)

据我了解Tomcat的catalina.properties文件,它们都被添加到类路径中,所以我没想到会有什么不同,但我试过,以防万一.

我的spring数据源定义非常简单:

  <bean id="securityDataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/venus" />
    <property name="username" value="root" />
    <property name="password" value="" />
  </bean>
Run Code Online (Sandbox Code Playgroud)

但是当我重新启动tomcat时,我收到以下错误:

ERROR: org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error …
Run Code Online (Sandbox Code Playgroud)

mysql spring tomcat tomcat7

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

从没有PIN /密码的PKCS11智能卡获取证书

摘要:当通过OpenSC在PKCS11上使用JCA时,在提取证书时会请求PIN.

我有一个需要使用智能卡签名的应用程序.OpenSC支持智能卡,因此我使用Java内置的pkcs11包装提供程序来使用它.出于功能原因,我需要在没有请求PIN的情况下获取卡中的证书.如果用户最终签名,那么当然需要PIN.

我发现我可以在不提供PIN的情况下从命令行执行此操作:

pkcs11-tool --module C:\WINDOWS\system32\opensc-pkcs11.dll -r -a 50-MDS_Signature -y cert -o p.cer
Using slot 1 with a present token (0x1)
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

Oracle的文档明确指出"构建器将根据需要使用先前配置的回调处理程序提示输入密码"(http://docs.oracle.com/javase/6/docs/technotes/guides/security/p11guide.html#登录).但是,KeyStore ks0 = ksbuilder0.getKeyStore();即使只提取公共信息(例如证书),我的代码总是请求引脚作为我的电话.

遵循代码的摘录:

private static final String PKCS11_LIB = "C:\\WINDOWS\\system32\\opensc-pkcs11.dll";
private static final String NAME = "OpenSCpkcs11";
private static final String SLOT = "1";
private static final String PIN = "11111111";
private static final String ALIAS = "myCert";

[...]

private static CallbackHandler myCallbackHandler = new CallbackHandler() {
    @Override
    public void handle(Callback[] callbacks) …
Run Code Online (Sandbox Code Playgroud)

java pkcs#11

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

docker build 使用错误的 Dockerfile 内容(bug?)

我已经使用 docker 多年了,现在我发现了一种非常奇怪的行为:该docker build命令使用的 Dockerfile 不是我所拥有的。

请参阅下一个日志:

PS D:\reposNovabase\charmander\charmanderWarehouse> type Dockerfile  
FROM adoptopenjdk/openjdk11-openj9:jdk-11.0.11_9_openj9-0.26.0-alpine
WORKDIR /app
COPY build/libs/charmanderWarehouse-1.0.0-SNAPSHOT.jar /app
EXPOSE 8083
CMD ["java", "-Xmx70m", "-jar", "charmanderWarehouse-1.0.0-SNAPSHOT.jar"]
PS D:\reposNovabase\charmander\charmanderWarehouse> docker build -f Dockerfile -t javiersedano/charmander-warehouse:test1 .
[+] Building 0.2s (7/7) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                  0.0s 
 => => transferring dockerfile: 32B                                                                                                                                   0.0s 
 => [internal] load .dockerignore                                                                                                                                     0.0s 
 => => transferring context: 2B                                                                                                                                       0.0s 
 => [internal] load metadata for docker.io/adoptopenjdk/openjdk11-openj9:jdk-11.0.11_9_openj9-0.26.0-alpine                                                           0.0s 
 => [1/3] FROM docker.io/adoptopenjdk/openjdk11-openj9:jdk-11.0.11_9_openj9-0.26.0-alpine                                                                             0.0s 
 => [internal] …
Run Code Online (Sandbox Code Playgroud)

docker docker-desktop

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

postDelayed在BroadcastReceiver中

我有一个在特定时间触发的BroadcastReceiver(通过AlarmManager).它是以编程方式安排的,具体取决于用户设置的首选项.

BroadcastReceiver做(简化和伪代码):

public void onReceive(Context context, Intent intent) {
  handler = new Handler();
  wifiManager.setWifiEnabled(true);
  // Wait a few seconds to activate wifi and get IP
  handler.postDelayed(new Runnable() {
    void run() {
      doTheJob();
    }
  }, 30000);
}

public void doTheJob() {
  doSomethingAndTheOther(); // this starts service: context.startService(i);
  wifiManager.setWifiEnabled(false);
}
Run Code Online (Sandbox Code Playgroud)

我已经在HTC Desire中使用了这段代码几年没有问题.此外,没有用户抱怨它不起作用.

但是,我最近买了一台Galaxy S3,并没有按预期工作.当我在未来几分钟设置闹钟(使用告知的偏好)时,它按预期工作:唤醒BroadcastReceiver,打开wifi,等待等待,完成作业并关闭wifi.

但是如果我在夜间设置闹钟(例如,3:00:00)则不会:闹钟被触发,wifi被打开......没有别的.这项工作既没有完成,也没有显然最终没有关闭wifi.我已创建日志并调用postDelayed(),但从未调用Runnable.run().

看来我的BroadcastReceiver进程在调用run()之前就已经死了.

知道为什么吗?有什么想法我怎么能避免它?

android

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

标签 统计

android ×2

docker ×1

docker-desktop ×1

java ×1

mysql ×1

pkcs#11 ×1

spring ×1

tomcat ×1

tomcat7 ×1

wifi ×1