标签: android-7.0-nougat

通过HTTPS连接到安装了Windows 2003 Server SP2的SHA256 CA时,Android 7.0 Nougat中出现"由peer关闭连接"错误

我的应用程序通过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

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

Assets的BitmapFactory.decodeStream在Android 7上返回null

如何从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 android-assets bitmapfactory android-7.0-nougat

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

Selendroid无法识别Android 7设备

我有一个运行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)

android selendroid android-7.0-nougat

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

如何为所有Android版本打开APK文件

背景

到目前为止,使用此意图有一种简单的方法来安装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

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

Android牛轧糖:提交了太多NetworkRequests

在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 android-7.0-nougat android-7.1-nougat

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

如何获得运行应用程序android 7(牛轧糖)的列表?

在android 6,我通过访问proc文件获得正在运行的应用程序和进程ID的列表.但是在android 7它没有用.那么我怎样才能在android nougat上获得进程ID的运行流程?

android android-7.0-nougat android-7.1-nougat

5
推荐指数
0
解决办法
970
查看次数

在android 7的背景中跟踪GPS位置

我有Android的应用程序,需要定期发送(比方说每隔10秒)一个位置更新到服务器.到目前为止没什么特别 然而,这完全在后台作为服务完成.此应用程序使用LocationManager定期接收当前GPS位置并将其发送到服务器.这当然是应用程序的简化故事,只关注这个问题

完整的应用程序工作正常,直到Android 6.在Android 6中,应用程序停止发送更新时,一段时间后屏幕关闭,但运动,屏幕或充电后再次活跃.这是由Doze功能引起的,这是oke.只要应用程序在移动后发送位置更新.但是在Android 7上,只有在屏幕打开或充电时才会在服务器上接收位置更新.移动(如步行)不会触发打开Doze(至少在服务器上没有接收到位置更新).该应用程序也被列入白名单以进行电池优化,但这并没有帮助.可能由GPS /网络关闭.

阅读Android文档,当设备处于打盹状态时,我看不到用于在应用程序控制的时间间隔内接收和发送当前GPS位置的解决方案.

是否有解决方案或者可以给某人一个方向来解决我对Android 7的GPS问题?

谢谢.

android-gps android-7.0-nougat

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

Android:在Nougat中获取整个WebView的截图(Android 7)

我使用下面的代码从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中获得整体内容高度?

android screenshot webview android-7.0-nougat

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

使用JobScheduler检测连接更改

由于CONNECTIVITY_CHANGEAndroid N中已弃用意图过滤器,如何通过JobScheduler检测连接性变化?

谁能帮我?

android android-jobscheduler android-7.0-nougat

5
推荐指数
0
解决办法
3542
查看次数

如何在Android版本7.0(牛轧糖)及以上版本中将InputType设置为InputType.TYPE_CLASS_NUMBER

我创建了自定义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)

感谢谢谢

keyboard android android-7.0-nougat

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