我在Android应用程序中使用Retrofit,这反过来意味着我使用OkHttp.我刚刚去了Alpha,并在我的崩溃报告中看到了许多非致命的异常被记录.所有这些都源于我的okhttp拦截器,然后记录的异常似乎都是在网络可能不稳定或连接丢失等情况下有效的事情.
我怎样才能做到这一点,以便这些例外不会记录到崩溃关系中,从而混淆了我对应用程序中出现的异常的看法?
一些例外的例子:
> Non-fatal Exception: javax.net.ssl.SSLHandshakeException
Connection closed by peer
okhttp3.internal.connection.RealConnection.connectTls (RealConnection.java:281)
okhttp3.internal.connection.RealConnection.establishProtocol (RealConnection.java:251)
okhttp3.internal.connection.RealConnection.connect (RealConnection.java:151)
okhttp3.internal.connection.StreamAllocation.findConnection (StreamAllocation.java:192)
okhttp3.internal.connection.StreamAllocation.findHealthyConnection (StreamAllocation.java:121)
okhttp3.internal.connection.StreamAllocation.newStream (StreamAllocation.java:100)
okhttp3.internal.connection.ConnectInterceptor.intercept (ConnectInterceptor.java:42)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:67)
okhttp3.internal.cache.CacheInterceptor.intercept (CacheInterceptor.java:93)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:67)
okhttp3.internal.http.BridgeInterceptor.intercept (BridgeInterceptor.java:93)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92)
okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept (RetryAndFollowUpInterceptor.java:120)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:67)
MY_INTERCEPTOR.intercept (AuthenticationInterceptor.java:30)
Run Code Online (Sandbox Code Playgroud)
和
> Non-fatal Exception: javax.net.ssl.SSLException
Read error: ssl=0xdee45cc0: I/O error during system call, Software caused connection abort
okio.Okio$2.read (Okio.java:139)
okio.AsyncTimeout$2.read (AsyncTimeout.java:237)
okio.RealBufferedSource.indexOf (RealBufferedSource.java:345)
okio.RealBufferedSource.readUtf8LineStrict (RealBufferedSource.java:217)
okio.RealBufferedSource.readUtf8LineStrict (RealBufferedSource.java:211)
okhttp3.internal.http1.Http1Codec.readResponseHeaders (Http1Codec.java:189)
okhttp3.internal.http.CallServerInterceptor.intercept (CallServerInterceptor.java:75)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92) …Run Code Online (Sandbox Code Playgroud) 我想确定我们的应用程序是否在 XenDesktop 会话上运行,而不是在本地运行。这是我迄今为止发现的:
我们目前有代码来检测 Citrix XenApp 会话,类似于 Helge Klein 在“用于确定应用程序是否在 Citrix 或终端服务上运行的 API ”中提到的解决方案。
可悲的是在XenDesktop环境的解决方案正在恢复回来WTSClientProtocolType的0这标志着本地控制台会话。
在回答同样的问题时,Josh Weatherly 提到检查 sessionname 环境变量。
但是,echo %sessionname%在 XenDesktop 环境中进行快速控制台检查会返回“控制台”。
从“检测 citrix“应用程序模式”? ”约翰西伯里提出了一种检测远程会话的解决方案(特别是不是 Citrix):
GetSystemMetrics(SM_REMOTESESSION) 然而返回 0 这也意味着它是一个本地会话。
有谁知道检测它是 XenDesktop 会话的方法吗?就您所见,我所有的尝试都返回会话是本地控制台会话。
我正在使用 XenDesktop Express 5.5,使用 Citrix Receiver Web 插件访问桌面。
我正在尝试使用玻璃gdk录制音频,并发现它很成问题.
我正在使用媒体记录器,并拥有所有正确的权限,但我一直得到媒体记录器100错误.我的代码看起来像这样:
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {
public void onError(MediaRecorder mediarecorder1, int k, int i1) {
Log.e(TAG, String.format("Media Recorder error: k=%d, i1=%d", k, i1));
}
});
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setOutputFile(mAudioFile.getAbsolutePath());
mMediaRecorder.prepare();
mMediaRecorder.start();
Run Code Online (Sandbox Code Playgroud)
这必须与谷歌眼镜有关,因为我在Android手机上运行完全相同的代码并且它正确地录制了音频.我发现很少有关于使用媒体记录器只在玻璃上录制音频的资源,我见过的大多数帖子都是录制视频和音频的人,而我对视频不感兴趣.
任何有关如何在Google Glass上录制音频的帮助将不胜感激!
android ×2
citrix ×1
google-gdk ×1
google-glass ×1
interceptor ×1
java ×1
okhttp ×1
retrofit2 ×1
session ×1
xendesktop ×1