Android Wear应用连接超时

时间:2015-09-08 23:13:46

标签: timeout httpurlconnection

我正在构建一个Android Wear应用程序,该应用程序使用HTTPUrlConnection()从网页收集一些数据。这在模拟器中完全正常,但不在真实设备上(我用于测试的Moto 360)。我在本地网络和外部网络上运行服务器,但不知何故真正的设备最终会出现连接超时。它也不是服务器,因为我尝试了不同的计算机,不同的软件和不同的网络与不同的路由器。 Android清单看起来也不错。我做错了什么,或者这可能是一个错误?

try {
        // create the HttpURLConnection
        HttpURLConnection connection;

            connection = (HttpURLConnection) url.openConnection();

        // just want to do an HTTP GET here
        connection.setRequestMethod("GET");

        // uncomment this if you want to write output to this url
        //connection.setDoOutput(true);

        // give it 15 seconds to respond
        connection.setReadTimeout(15 * 1000);
        connection.connect();

        // read the output from the server
        reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        stringBuilder = new StringBuilder();

        String line = null;
        while ((line = reader.readLine()) != null) {
            stringBuilder.append(line + "\n");
        }
        bodyHtml = stringBuilder.toString();
    } catch (Exception e) {
        e.printStackTrace();
        //throw e;
    } finally {
        // close the reader; this can throw an exception too, so
        // wrap it in another try/catch block.
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }
    }

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="vendor.atestapp" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:name="android.hardware.type.watch" />
<service android:name=".WearMessageListenerService">
    <intent-filter>
        <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
    </intent-filter>
</service>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.DeviceDefault" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

日志输出:

09-09 00:50:50.177    3664-8913/vendor.atestapp W/System.err﹕ java.net.ConnectException: failed to connect to /192.168.1.39 (port 8080): connect failed: ETIMEDOUT (Connection timed out)
09-09 00:50:50.177    3664-8913/vendor.atestapp W/System.err﹕ at libcore.io.IoBridge.connect(IoBridge.java:124)
09-09 00:50:50.177    3664-8913/vendor.atestapp W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
09-09 00:50:50.177    3664-8913/vendor.atestapp W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456)
09-09 00:50:50.177    3664-8913/vendor.atestapp W/System.err﹕ at java.net.Socket.connect(Socket.java:882)

2 个答案:

答案 0 :(得分:1)

发现问题了! HTTPUrlConnection对Wear不起作用。谷歌禁用它,但你可以完美地编码它。显然这是Google的某种政策,但他们忘了在模拟器中禁用它。

替代方案(这就是我现在的工作方式):在手机上使用HTTPUrlConnection,并使用MessageApi与Wear设备进行通信。

答案 1 :(得分:1)

Android手表不会通过手机的蓝牙连接连接到互联网,UrlHTTPConnection被禁用,因为它不是磨损问题,因为我它将通过WiFi连接时连接。< / p>

不幸的是,大多数设备在2015年中期之前不支持WiFi :-(更不幸的是,用于手持设备的Android Wear应用程序不会将手表中的蓝牙与来自全球的互联网连接起来。

启用了UrlHTTPConnection,因为它不是Wear问题。罪魁祸首是手持设备上的Wear-App。

显然,它不可行“终身”但是出于好奇,如果您通过WiFi连接设备并禁用手机上的蓝牙(它总是更喜欢BT用于电源考虑)< / em>它会奇迹般地开始工作。