我的应用程序通过HTTPS与服务器界面(经典ASP)进行通信.
它在Android 7.0 Nougat的早期版本中运行得非常好.(直到6.0)
但是,在Android 7.0手机和AVD(Android虚拟设备)中出现由对等关闭连接错误.
服务器是Windows 2003 Server SP2(2016年7月23日SSL证书从SHA1更新到SHA256),HTTPS,经典ASP
服务器的GeoTrust的SSL证书安装检查状态如下
(cryptoreport.geotrust.com/checker/views/certCheck. jsp)
GeoTrust检查我的服务器证书的状态屏幕截图
(未启用协议:TLS1.1,TLS1.2)
在我看来,Android 7.0无法与TLS1.0的Windows 2003 Server进行SSL握手(只有TLSv1.1,TLSv1.2可以支持使用SHA256证书成功握手吗?)
这是对的吗?
我刚刚发现这个热门修复程序:http://support.microsoft.com/kb/968730
这可以是一个解决方案吗?
我怎么能解决这个问题
https android sha256 sslhandshakeexception android-7.0-nougat
如何从Android 7中的Asset目录解码位图?
我的应用程序在适用于Marshmallow的Android版本上运行良好.使用Android 7,无法从Asset目录加载图像.
我的代码:
private Bitmap getImage(String imagename) {
// Log.dd(logger, "AsyncImageLoader: " + ORDNER_IMAGES + imagename);
AssetManager asset = context.getAssets();
InputStream is = null;
try {
is = asset.open(ORDNER_IMAGES + imagename);
} catch (IOException e) {
// Log.de(logger, "image konnte nicht gelesen werden: " + ORDNER_IMAGES + imagename);
return null;
}
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(is, null, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, PW, …Run Code Online (Sandbox Code Playgroud) 我有一个运行Android 7.0的Nexus 5X(安全补丁级别:2016年11月5日;内部版本号:N5D91L)插入我的Mac并启用了USB调试.
ADB识别该设备(因此该解决方案不相关):
$ adb devices -l
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
016e07928f462163 device usb:337641472X product:bullhead model:Nexus_5X device:bullhead
Run Code Online (Sandbox Code Playgroud)
我使用演示设置打开Selendroid服务器:
java -jar selendroid-standalone-0.17.0-with-dependencies.jar -app selendroid-test-app-0.17.0.apk
Run Code Online (Sandbox Code Playgroud)
但是当我检查时http://localhost:4444/wd/hub/status,设备未列在supportedDevices:
{
"value": {
"os": {
"name": "Mac OS X",
"arch": "x86_64",
"version": "10.11.6"
},
"build": {
"browserName": "selendroid",
"version": "0.17.0"
},
"supportedDevices": [],
"supportedApps": [
{
"mainActivity": "io.selendroid.testapp.HomeScreenActivity",
"appId": "io.selendroid.testapp:0.17.0",
"basePackage": …Run Code Online (Sandbox Code Playgroud) 到目前为止,使用此意图有一种简单的方法来安装APK文件:
final Intent intent=new Intent(Intent.ACTION_VIEW)
.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
Run Code Online (Sandbox Code Playgroud)
但是,如果你的应用程序中的Android API 24以上(牛轧糖- 7.0),你就可以或更新运行这段代码,你会得到一个异常,如图所示这里,例如:
android.os.FileUriExposedException: file:///storage/emulated/0/sample.apk exposed beyond app through Intent.getData()
Run Code Online (Sandbox Code Playgroud)
所以我做了我被告知的事情:使用支持库的FileProvider类,如下:
final Intent intent = new Intent(Intent.ACTION_VIEW)//
.setDataAndType(android.support.v4.content.FileProvider.getUriForFile(context,
context.getPackageName() + ".provider", apkFile),
"application/vnd.android.package-archive").addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Run Code Online (Sandbox Code Playgroud)
清单:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
Run Code Online (Sandbox Code Playgroud)
res/xml/provider_paths.xml:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<!--<external-path name="external_files" path="."/>-->
<external-path
name="files_root"
path="Android/data/${applicationId}"/>
<external-path
name="external_storage_root"
path="."/>
</paths>
Run Code Online (Sandbox Code Playgroud)
但是,现在它仅适用于Android Nougat.在Android 5.0上,它抛出一个异常:ActivityNotFoundException.
我可以添加一个Android OS版本的检查,并使用任何一种方法,但正如我所读,应该使用一种方法:FileProvider.
所以,我尝试使用我自己的ContentProvider充当FileProvider,但我得到了与支持库的FileProvider相同的异常.
这是我的代码:
final Intent intent = new Intent(Intent.ACTION_VIEW)
.setDataAndType(OpenFileProvider.prepareSingleFileProviderFile(apkFilePath),
"application/vnd.android.package-archive")
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Run Code Online (Sandbox Code Playgroud)
OpenFileProvider.java …
android android-intent apk android-fileprovider android-7.0-nougat
在Android Nougat 7.1.1上连续使用应用程序后,它开始在后台崩溃,直到手动启动。从Firebase,我得到以下日志:
Caused by java.lang.IllegalArgumentException: Too many NetworkRequests filed
android.os.Parcel.readException (Parcel.java:1688)
android.os.Parcel.readException (Parcel.java:1637)
android.net.IConnectivityManager$Stub$Proxy.pendingListenForNetwork (IConnectivityManager.java:2460)
android.net.ConnectivityManager.registerNetworkCallback (ConnectivityManager.java:3127)
com.XXX.XX.location.GPSControl$Companion.setInitialized (GPSControl.java)
__null__.getGApiClient (GPSControl.java)
__null__.setGApiClient (GPSControl.java)
__null__.setConnMan (GPSControl.java)
__null__.setSf (GPSControl.java)
__null__.init (GPSControl.java)
__null__.getPI (GPSControl.java)
__null__.triggerLocation (GPSControl.java)
__null__.triggerLocation$default (GPSControl.java)
__null__.access$getInitialized$p (GPSControl.java)
com.XXX.XX.KGL.afterLoginSetup (KGL.java)
com.XXX.XX.KGL.onCreate (KGL.java)
android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1025)
android.app.ActivityThread.handleBindApplication (ActivityThread.java:5460)
android.app.ActivityThread.-wrap2 (ActivityThread.java)
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1556)
android.os.Handler.dispatchMessage (Handler.java:102)
android.os.Looper.loop (Looper.java:154)
android.app.ActivityThread.main (ActivityThread.java:6176)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:888)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:778)
Run Code Online (Sandbox Code Playgroud)
我检查了android marshmallow源代码,它不包含引发此错误的代码,但是master分支却包含了,因此我们可以得出结论,此错误是特定于Nougat的。
private void enforceRequestCountLimit() {
synchronized (mUidToNetworkRequestCount) {
int networkRequests = mUidToNetworkRequestCount.get(mUid, 0) …Run Code Online (Sandbox Code Playgroud) 在android 6,我通过访问proc文件获得正在运行的应用程序和进程ID的列表.但是在android 7它没有用.那么我怎样才能在android nougat上获得进程ID的运行流程?
我有Android的应用程序,需要定期发送(比方说每隔10秒)一个位置更新到服务器.到目前为止没什么特别 然而,这完全在后台作为服务完成.此应用程序使用LocationManager定期接收当前GPS位置并将其发送到服务器.这当然是应用程序的简化故事,只关注这个问题
完整的应用程序工作正常,直到Android 6.在Android 6中,应用程序停止发送更新时,一段时间后屏幕关闭,但运动,屏幕或充电后再次活跃.这是由Doze功能引起的,这是oke.只要应用程序在移动后发送位置更新.但是在Android 7上,只有在屏幕打开或充电时才会在服务器上接收位置更新.移动(如步行)不会触发打开Doze(至少在服务器上没有接收到位置更新).该应用程序也被列入白名单以进行电池优化,但这并没有帮助.可能由GPS /网络关闭.
阅读Android文档,当设备处于打盹状态时,我看不到用于在应用程序控制的时间间隔内接收和发送当前GPS位置的解决方案.
是否有解决方案或者可以给某人一个方向来解决我对Android 7的GPS问题?
谢谢.
我使用下面的代码从a截取屏幕截图WebView.它在Android 6及更低版本中运行良好,但在Android 7中它只占用webview的可见部分.
// before setContentView
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
WebView.enableSlowWholeDocumentDraw();
}
...
// before set webview url
webView.setDrawingCacheEnabled(true);
// after html load complete
final Bitmap b = Bitmap.createBitmap(webView.getMeasuredWidth(),
webView.getContentHeight(), Bitmap.Config.ARGB_8888);
Canvas bitmapHolder = new Canvas(b);
webView.draw(bitmapHolder);
Run Code Online (Sandbox Code Playgroud)
但位图b不完整.如何WebView在Android Nougat中截取整个屏幕截图?
编辑:
我发现webView.getContentHeight不行.我对整个webview高度进行了硬编码,效果很好.问题是:如何WebView在Android Nougat中获得整体内容高度?
由于CONNECTIVITY_CHANGEAndroid N中已弃用意图过滤器,如何通过JobScheduler检测连接性变化?
谁能帮我?
我创建了自定义Edittext,其中我将InputType设置为this.setInputType(InputType.TYPE_CLASS_NUMBER);但问题是它在7.0(牛轧糖)以下完美运行但是在7.0以上它显示了字母数字键盘.
另一个奇怪的事情发生在我触摸EditText时,我很快就得到了软数字键盘,但在不到一秒的时间内,它会自动变为显示所有字母的常规软键盘.当键盘打开时,比按下后退按钮,比键盘关闭,但当我重新输入Edittext时.直到我点击onther edittext然后当前的edittext才打开键盘
这是Nougat的问题还是我做错了什么
有关信息,我已使用代码将setSoftInputMode设置为ADJUST PAN
setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN
|WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Run Code Online (Sandbox Code Playgroud)
并设置数字小键盘使用 this.setInputType(InputType.TYPE_CLASS_NUMBER);
编辑 - 当我删除 -
setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN
|WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Run Code Online (Sandbox Code Playgroud)
从活动每件事工作正常(数字键盘打开数字edittext,字母数字键盘打开alphanumerical edittext)除了内容没有向上方向意味着键盘隐藏edittext(因为无知这个属性SOFT_INPUT_ADJUST_PAN)
感谢谢谢
android ×9
android-gps ×1
apk ×1
https ×1
keyboard ×1
screenshot ×1
selendroid ×1
sha256 ×1
webview ×1