小编mat*_*ttm的帖子

我什么时候需要android.hardware.location.gps和android.hardware.location.network?

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开发者帮助中心中详细了解此更改.

来自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.gpsandroid.hardware.location.network.或者这仅适用于LocationManager融合位置?

我需要android.hardware.location.gpsandroid.hardware.location.network不?

gps android geolocation android-permissions android-gps

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

如何让Spring Boot自动重新连接到PostgreSQL?

我正在运行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文档没有帮助; 我不知道所描述的组件是否足以理解我应该查看哪些文档.

java postgresql spring spring-jdbc spring-boot

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

如何在Spring-boot上启用TLS 1.2?

我试图在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似乎有支持.我不知道如何确切地检查春季启动中运行的版本.

ssl tomcat8 spring-boot android-5.0-lollipop

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

如何在Java Spring Tomcat中快速关闭无响应的websocket?

我有一个实时应用程序,客户端使用websockets连接Spring Framework服务器,该服务器运行Spring Boot Tomcat.我希望服务器能够快速(在5秒内)检测到客户端由于网络断开或其他问题而停止响应并关闭websocket.

我试过了

  1. 将文档中描述的"配置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之间的链接.

  1. 每2.5秒从服务器发送ping消息.通过断开网络连接手动断开客户端连接后,服务器会愉快地再发送ping超过30秒,直到出现传输错误.

  2. 同时1和2

  3. 1和2并server.session-timeout = 5在application.properties中设置

我测试这个的方法是:

  1. 将websocket从笔记本电脑客户端连接到Tomcat服务器
  2. 使用物理交换机关闭笔记本电脑上的网络连接
  3. 等待Tomcat服务器事件

Spring FrameworkTomcat服务器如何快速检测到客户端已断开连接或未响应以关闭websocket?

java spring tomcat timeout websocket

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

有没有一种简单的方法可以从本地 gradle 缓存中删除一个依赖项?

本地 gradle 缓存存储 maven/gradle 依赖项的副本。如何清除gradle缓存?涵盖如何清除整个缓存,而不是单个包。

有没有一种简单的方法可以从本地 gradle 缓存中删除一个包?例如,在积极开发库时,这会很有用。为了测试一个小的库更改,我目前必须从文件系统中清除整个缓存,以便不使用旧的缓存版本的库。

我知道也可以使用如何强制 gradle 重新下载依赖项中描述的gradle ResolutionStrategy . 我不希望更改 gradle 配置,因为大多数情况下,对于大多数开发人员来说,默认缓存行为很好。

caching gradle android-gradle-plugin

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

Websocket SSL握手失败

我有用于安全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 …

ssl grizzly websocket tyrus android-5.0-lollipop

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

在传递Android DialogFragment参数时,onCreateDialog bundle agument意外地为null

我正在尝试使用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 android bundle dialogfragment

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

更换片段时如何防止"java.lang.IllegalStateException:Fragment already added"?

尽管我努力防止碎片被多次添加,但我还是继续遇到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 …

java android android-fragments

6
推荐指数
2
解决办法
8904
查看次数

如何将aar库上传到Nexus?

我有一个Android应用程序的Android aar库.它与直接包含在Android项目中的aar库一起正常工作.我想将此库移动到我的内部Nexus maven存储库,以便其他开发人员也可以使用该库.

如何将aar上传到Nexus(Maven存储库)?在Web界面中没有明显的选项:

Nexus网络界面

android nexus maven android-gradle-plugin aar

5
推荐指数
2
解决办法
7063
查看次数

为什么python pathlib Path('')。exists()返回True?

我期望Path('')这是一条不存在的路径,因为它与文件或目录名称不对应。为什么认为这存在?

from pathlib import Path

print(Path('').exists())
Run Code Online (Sandbox Code Playgroud)

我认为通过将定义Path('')为与相同,可以获得一个好处Path('.')。在什么情况下有优势?

python python-3.x pathlib

5
推荐指数
2
解决办法
1232
查看次数

如何将python代码导入django中的views.py文件

我是django的新手,我正在尝试将表单提交的响应链接到我在不同文件中编写的几个python方法,这些方法将使用用户输入作为参数.我想知道如何导入这些方法并打印结果.

我的python文件已命名Crunch.py,并且位于views.py我尝试过的同一目录中:from Crunch import * 但它无效.我想知道我是否需要将文件移动到别处或我需要写什么来从Crunch导入所有方法.

python django import

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