Google会通过电子邮件通知Android位置权限的更改:
我们将在2016年10月15日进行更改,这将影响使用ACCESS_FINE_LOCATION但未明确拥有"android.hardware.location.gps"使用功能的API版本21(Android 5.0,Lollipop)或更高版本的应用.展望未来,这些应用程序可以安装在没有GPS硬件的设备上.在大多数情况下,这不会成为问题,因为基于Wi-Fi和基于Cell-ID的位置为这些应用的典型操作提供了足够高的保真度.但是,任何需要GPS硬件的应用程序(例如GPS导航仪)都应该明确地将"android.hardware.location.gps"使用功能添加到其清单中.
如果您的应用需要GPS才能正常运行且您的清单声明中未包含,则您的用户可能会遇到较差的应用体验.
此外,如果您正在使用融合位置提供商并希望从GPS接收最准确的位置样本(即使用PRIORITY_HIGH_ACCURACY),则必须在应用清单中包含"android.hardware.location.gps"功能,以确保Google Play只会将您的应用分发给配备GPS传感器的设备.
您可以在Android开发者帮助中心中详细了解此更改.
要从NETWORK_PROVIDER或GPS_PROVIDER接收位置更新,您必须通过在Android清单文件中分别声明ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限来请求用户的权限.没有这些权限,您的应用程序将在请求位置更新时在运行时失败.
如果您同时使用NETWORK_PROVIDER和GPS_PROVIDER,则只需要请求ACCESS_FINE_LOCATION权限,因为它包含两个提供程序的权限.ACCESS_COARSE_LOCATION的权限仅允许访问NETWORK_PROVIDER.
警告:如果您的应用针对Android 5.0(API级别21)或更高版本,则必须声明您的应用使用清单文件中的android.hardware.location.network或android.hardware.location.gps硬件功能,具体取决于您的应用程序从NETWORK_PROVIDER或GPS_PROVIDER接收位置更新.如果您的应用从这些位置提供商来源中收到位置信息,则需要声明该应用在您的应用清单中使用这些硬件功能.在Android 5.0(API 21)之前运行版本的设备上,请求ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限包括对位置硬件功能的隐含请求.但是,请求这些权限不会自动请求Android 5.0(API级别21)及更高版本上的位置硬件功能.
我正在使用融合位置提供程序,目标是API 21,并使用ACCESS_FINE_LOCATION.我没有特别关心GPS是否可用,只是报告了最准确的位置.
android.hardware.location.gps和android.hardware.location.network.或者这仅适用于LocationManager融合位置?我需要android.hardware.location.gps和android.hardware.location.network不?
我正在运行Spring Boot连接到PostgreSQL数据库.我已经验证,如果在数据库之后启动Spring Boot,数据将写入数据库.
spring.datasource.url = jdbc:postgresql://localhost/dbname
spring.datasource.username = user
spring.datasource.password = secret
spring.datasource.driver-class-name = org.postgresql.Driver
spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1
Run Code Online (Sandbox Code Playgroud)
当开发中的数据库发生变化时,我会遇到异常:
PreparedStatementCallback; SQL []; This connection has been closed.; nested exception is org.postgresql.util.PSQLException: This connection has been closed.
请注意,异常发生时可以再次访问数据库; 我认为问题是连接是陈旧的,因为它最初连接的数据库端点由于重新启动而不再可用.重新启动Spring Boot可以解决此问题.
如何配置Spring Boot以重新连接到PostgreSQL,以便我不需要重新启动它?
我试图按照Spring Boot JPA中的答案- 配置自动重新连接和如何在spring jpa中关闭连接时如何重新连接数据库?.我不确定PostgreSQL的行为是否与MySQL不同.我阅读Spring Boot文档没有帮助; 我不知道所描述的组件是否足以理解我应该查看哪些文档.
我试图在Spring-boot 1.2.1上启用Tomcat上的TLS 1.2.由于SSL握手失败,Android 5.0无法连接到默认的SSL设置.Android 4.4,iOS,Firefox和Chrome都连接到默认版本.我认为这是因为Android 5.0支持的TLS协议和spring boot tomcat默认值(TLS v1?)不匹配.
我想我想要更改此application.properties设置:
server.ssl.protocol=TLS
Run Code Online (Sandbox Code Playgroud)
但我没有找到其他可接受的字符串(或者如果有,甚至).通过在spring boot github中搜索"protocol",我找不到枚举.我试过"TLSv1.2",但这似乎没有效果.
application.properties中的当前SSL配置是:
server.ssl.key-store = chainedcertificates.p12
server.ssl.key-store-password = secret
server.ssl.key-store-type = PKCS12
Run Code Online (Sandbox Code Playgroud)
如何在春季启动时启用TLS 1.2?
如果重要,我使用的是Java 1.7.这方面的文档似乎表明它应该支持TLS 1.2.
Tomcat 8似乎有支持.我不知道如何确切地检查春季启动中运行的版本.
我有一个实时应用程序,客户端使用websockets连接Spring Framework服务器,该服务器运行Spring Boot Tomcat.我希望服务器能够快速(在5秒内)检测到客户端由于网络断开或其他问题而停止响应并关闭websocket.
我试过了
将文档中描述的"配置WebSocket引擎"设置为最大会话空闲超时 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html
@Bean
public WebSocketHandler clientHandler() {
return new PerConnectionWebSocketHandler(ClientHandler.class);
}
@Bean
public ServletServerContainerFactoryBean createWebSocketContainer() {
ServletServerContainerFactoryBean container =
new ServletServerContainerFactoryBean();
container.setMaxSessionIdleTimeout(5000);
container.setAsyncSendTimeout(5000);
return container;
}
Run Code Online (Sandbox Code Playgroud)我不确定这是否正确实现,因为我没有看到ServletServerContainerFactoryBean和我的一代ClientHandler之间的链接.
每2.5秒从服务器发送ping消息.通过断开网络连接手动断开客户端连接后,服务器会愉快地再发送ping超过30秒,直到出现传输错误.
同时1和2
1和2并server.session-timeout = 5在application.properties中设置
我测试这个的方法是:
Spring FrameworkTomcat服务器如何快速检测到客户端已断开连接或未响应以关闭websocket?
本地 gradle 缓存存储 maven/gradle 依赖项的副本。如何清除gradle缓存?涵盖如何清除整个缓存,而不是单个包。
有没有一种简单的方法可以从本地 gradle 缓存中删除一个包?例如,在积极开发库时,这会很有用。为了测试一个小的库更改,我目前必须从文件系统中清除整个缓存,以便不使用旧的缓存版本的库。
我知道也可以使用如何强制 gradle 重新下载依赖项中描述的gradle ResolutionStrategy ?. 我不希望更改 gradle 配置,因为大多数情况下,对于大多数开发人员来说,默认缓存行为很好。
我有用于安全websocket连接的spring-boot Tomcat服务器.服务器接受Android 4.4,iOS,Firefox和Chrome客户端,并且没有使用授权签名证书的失败.但是,Android 5.0无法通过SSL握手.
Caused by: javax.net.ssl.SSLHandshakeException: Handshake failed
at com.android.org.conscrypt.OpenSSLEngineImpl.unwrap(OpenSSLEngineImpl.java:436)
at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:1006)
at org.glassfish.grizzly.ssl.SSLConnectionContext.unwrap(SSLConnectionContext.java:172)
at org.glassfish.grizzly.ssl.SSLUtils.handshakeUnwrap(SSLUtils.java:263)
at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:603)
at org.glassfish.grizzly.ssl.SSLFilter.doHandshakeStep(SSLFilter.java:312)
at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:552)
at org.glassfish.grizzly.ssl.SSLBaseFilter.handleRead(SSLBaseFilter.java:273)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
at java.lang.Thread.run(Thread.java:818)
Caused by: javax.net.ssl.SSLProtocolException: SSL handshake terminated: ssl=0xa1f34200: Failure in SSL library, usually a protocol error
error:1408E0F4:SSL routines:SSL3_GET_MESSAGE:unexpected message (external/openssl/ssl/s3_both.c:498 0xac526e61:0x00000000)
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake_bio(Native Method)
at com.android.org.conscrypt.OpenSSLEngineImpl.unwrap(OpenSSLEngineImpl.java:423)
Run Code Online (Sandbox Code Playgroud)
我认为问题在于TLS或密码套件由于Android …
我正在尝试使用DialogFragment在Android中显示一个基本对话框,使用对话框消息的参数,如StackOverflow线程和DialogFragment文档中所述.我的问题是onCreateDialog中的Bundle参数savedInstanceState始终显示为null,这意味着该活动显示一个空对话框而不是带有消息的对话框.如何从newInstance工厂方法获取非null的bundle内容以显示在onCreateDialog中?或者我只是遗漏了别的东西?
我从文档中看到的唯一重要区别是我使用的是非静态类.我希望积极的对话框按钮取决于消息的内容,所以这是故意的.
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
public class SampleDialog extends DialogFragment {
public static final String DIALOG_MESSAGE = "dialogMessage";
private String dialogMessage;
// arguments are handled through factory method with bundles for lifecycle maintenance
public SampleDialog(){
}
public static SampleDialog newInstance(String dialogMessage){
SampleDialog fragment = new SampleDialog();
Bundle args = new Bundle();
args.putString(DIALOG_MESSAGE, dialogMessage);
fragment.setArguments(args);
return fragment;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if(savedInstanceState != null) {
dialogMessage = …Run Code Online (Sandbox Code Playgroud) 尽管我努力防止碎片被多次添加,但我还是继续遇到java.lang.IllegalStateException: Fragment already added: VideoFragment.
我有一个活动,其中仅在onCreate中实例化VideoFragment.在我尝试显示VideoFragment的唯一地方,我首先检查是否已添加此片段.
private VideoFragment videoFragment;
public void onCreate(Bundle savedInstanceState) {
...
videoFragment = new VideoFragment();
...
}
private void showVideoFragment() {
if (!videoFragment.isAdded()) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, videoFragment, "video").commit();
}
}
Run Code Online (Sandbox Code Playgroud)
我无法在调试器中一致地重现此问题,但我的运行时错误报告继续报告java.lang.IllegalStateException: Fragment already added: VideoFragment用户的异常,堆栈跟踪由Android类组成.
/FragmentManager.java:1133? android.app.FragmentManagerImpl.addFragment
/BackStackRecord.java:648? android.app.BackStackRecord.run
/FragmentManager.java:1453? android.app.FragmentManagerImpl.execPendingActions
/FragmentManager.java:443? android.app.FragmentManagerImpl$1.run
/Handler.java:733? android.os.Handler.handleCallback
/Handler.java:95? android.os.Handler.dispatchMessage
/Looper.java:146? android.os.Looper.loop
/ActivityThread.java:5487? android.app.ActivityThread.main
/Method.java:-2? java.lang.reflect.Method.invokeNative
/Method.java:515? java.lang.reflect.Method.invoke
/ZygoteInit.java:1283? com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
/ZygoteInit.java:1099? com.android.internal.os.ZygoteInit.main
/NativeStart.java:-2? dalvik.system.NativeStart.main
Run Code Online (Sandbox Code Playgroud)
添加的定义是否与isAdded()用于检查片段事务的定义不匹配?
或者在某种程度上,活动中的videoFragment引用是不一样的?保存状态http://developer.android.com/guide/components/activities.html#SavingActivityState时,我需要明确处理这个问题吗?
或者是否有可靠的替代方法来检查片段是否已被添加?
UPDATE …
我有一个Android应用程序的Android aar库.它与直接包含在Android项目中的aar库一起正常工作.我想将此库移动到我的内部Nexus maven存储库,以便其他开发人员也可以使用该库.
如何将aar上传到Nexus(Maven存储库)?在Web界面中没有明显的选项:
我期望Path('')这是一条不存在的路径,因为它与文件或目录名称不对应。为什么认为这存在?
from pathlib import Path
print(Path('').exists())
Run Code Online (Sandbox Code Playgroud)
我认为通过将定义Path('')为与相同,可以获得一个好处Path('.')。在什么情况下有优势?
我是django的新手,我正在尝试将表单提交的响应链接到我在不同文件中编写的几个python方法,这些方法将使用用户输入作为参数.我想知道如何导入这些方法并打印结果.
我的python文件已命名Crunch.py,并且位于views.py我尝试过的同一目录中:from Crunch import *
但它无效.我想知道我是否需要将文件移动到别处或我需要写什么来从Crunch导入所有方法.
android ×4
java ×4
python ×2
spring ×2
spring-boot ×2
ssl ×2
websocket ×2
aar ×1
android-gps ×1
bundle ×1
caching ×1
django ×1
geolocation ×1
gps ×1
gradle ×1
grizzly ×1
import ×1
maven ×1
nexus ×1
pathlib ×1
postgresql ×1
python-3.x ×1
spring-jdbc ×1
timeout ×1
tomcat ×1
tomcat8 ×1
tyrus ×1