Android一些网络工作(ping)不起作用

时间:2017-11-01 00:33:42

标签: android networking

我正在开发一个Android应用程序。 它使用一些网络服务,如:

  • Firebase Firestore
  • 第三方REST API
  • 平。

当我开发这个时,一切正常。 所以我在手机上测试了它,然后我把它上传到了游戏商店。 上传到Play商店后,我尝试下载并测试。 但ping只是失败!!!

我无法理解这种情况。

首先,Firebase Firestore正常运行。

其次,我正在使用第三方REST API。要使用该服务,我正在使用" Retrofit"图书馆。 它也可以正常工作。

第三,我的应用程序具有检查服务器状态的功能。 对于此功能,我实现了" ping"。 这只是ping。

  

" ping -c 1 xxx.xxx.xxx.xxx"

显示最终用户的延迟。 它在调试/发布/签名APK中工作正常。

但是当我从Play商店下载时它不起作用。

我只添加了一个权限。

<uses-permission android:name="android.permission.INTERNET" />

我是否应该定义ACCESS_NETWORK_STATE权限? 但Firestore和其他第三方REST API工作正常。

以下是我的&#39; build.gradle&#39;文件。

android {
    signingConfigs {
        config {
            keyAlias xxx
            keyPassword xxx
            storeFile xxx
            storePassword 'xxx'
        }
    }
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        multiDexEnabled true
        applicationId "xxx"
        minSdkVersion 22
        targetSdkVersion 25
        versionCode 16
        versionName "1.1.7"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
        }
        debug {
        }
    }
    productFlavors {
    }
}

我的&#34; proguard-rules.pro&#34;文件是空的。

以下是获取ping信息的代码。

    public static String ping(String host) throws IOException, InterruptedException {

    Runtime runtime = Runtime.getRuntime();
    Process proc = runtime.exec("ping -c 1 -w 3 " + host);
    proc.waitFor();
    int exit = proc.exitValue();

    if (exit == 0) {
        StringBuffer echo = new StringBuffer();
        try (BufferedReader buffer = new BufferedReader(new InputStreamReader(proc.getInputStream()))) {
            String line = "";
            while ((line = buffer.readLine()) != null) {
                echo.append(line + "\n");
            }
        }

        return getPingStats(echo.toString());
    } else if (exit == 1) {
        pingError = "failed, exit = 1";
        Log.e(TAG, "[CHICKEN] ping - error: " + pingError);
        return null;
    } else {
        pingError = "error, exit = 2";
        Log.e(TAG, "[CHICKEN] ping - error: " + pingError);
        return null;
    }
}

0 个答案:

没有答案