我已经修改了Albeacon Reference Application的RangingActivity,以便每次检测到相对于信标的更改时发送HTTP请求。我只需要向服务器发送请求,那就是那个。无需进一步互动。
一切正常,直到发出HTTP请求 - 没有任何反应:
@Override
public void onBeaconServiceConnect() {
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
Beacon firstBeacon = beacons.iterator().next();
logToDisplay("The first beacon " + firstBeacon.toString() + " is about " + firstBeacon.getDistance() + " meters away.");
String distance = String.valueOf(firstBeacon.getDistance());
String url_string = "http://" + IP_string + "/index.py?name=" + Name_string + "&location=" + beacons.iterator().next().getId2() + "," + beacons.iterator().next().getId3() + "&distance=" + beacons.iterator().next().getDistance();
Log.v("url", url_string);
try {URL url = new URL(url_string);
try {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.disconnect();
} catch (IOException e){Log.v("error", e.toString());}
} catch (MalformedURLException m){Log.v("error", m.toString());}
}
}
});
try {
beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
} catch (RemoteException e) { }
}
我是Android新手,所以我不确定这是否在UIThread上运行。如果是,那么我真的很感激使用Asynctasks(或任何可能对我的情况有帮助的替代方法)实现这一点的一些帮助。
答案 0 :(得分:2)
你错过了一步:
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.disconnect();
试试:
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
int response = conn.getResponseCode();
Log.d(DEBUG_TAG, "The response is: " + response);
is = conn.getInputStream();
conn.disconnect();
最后阅读:http://developer.android.com/training/basics/network-ops/connecting.html