- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我要发送JSON字符串
{
"latitude": 53.86898504,
"longitude": 10.66561187,
"time": "25.04.2015 11:37:11",
"route": 4
}
每 60 秒向服务器发送一次,所以当我尝试从我的互联网连接 BroadcastReceiver 发送 JSON 字符串时,那里的 JSON 字符串为 null 但是当我从 onLocationChanged 方法发送数据时,我在 PostData 类中获取字符串,但我想要如果互联网不可用,则在互联网连接可用时发送数据,我将短时间存储该字符串。我如何实现它以获取 CONNECTIVITY_ACTION BroadcastReceiver 中的 JSONString?
我很感激任何帮助。
MainActivity 类:
public class MainActivity extends ActionBarActivity {
Location location;
LocationManager locationManager;
String jSONString;
TextView textJSON;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textJSON = (TextView) findViewById(R.id.textJSON);
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener ll = new myLocationListener();
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, ll);
}
private class BroadcastReceiverListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(
android.net.wifi.WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
//code to get the strongest wifi access point in the JSON string the routes's value.
}
else if (intent.getAction().equals(
android.net.ConnectivityManager.CONNECTIVITY_ACTION)) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = connectivityManager
.getActiveNetworkInfo();
boolean isConnected = netInfo != null
&& netInfo.isConnectedOrConnecting();
if (isConnected) {
Toast.makeText(context,
"The device is connected to the internet ",
Toast.LENGTH_SHORT).show();
if (location == null) {
Location locat = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (locat == null) {
LocationListener locLis = new myLocationListener();
LocationManager locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
Looper myLooper = Looper.myLooper();
locMan.requestSingleUpdate(criteria, locLis,
myLooper);
} else {
System.out.println("locat is not null");
}
} else {
PostData sender = new PostData();
sender.timer(jSONString);
textJSON.setText(jSONString);
}
} else {
Toast.makeText(context,
"Please connect the device to the internet.",
Toast.LENGTH_SHORT).show();
}
}
}
}
class myLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
if (location != null) {
double pLong = location.getLongitude();
double pLat = location.getLatitude();
...
String time = sdf.format(location.getTime());
jSONString = convertToJSON(pLong, pLat, time);
System.out.println("The output of onLocationChanged: "+ jSONString);
//The code works fine here. JSON string has its values here but in broadcastReceiver JSON string has null.
// PostData sender = new PostData();
// sender.timer(jSONString);
// textJSON.setText(jSONString);
}
}
}
}
最佳答案
看起来你可以通过添加一个额外的标志作为实例变量来确定你是否在没有互联网的情况下获得位置更新,并使 isConnected
标志成为一个实例变量,从而获得你想要的行为.
想法是,如果有互联网连接,则每次收到位置更改事件时都发送位置数据,否则设置标志并等待互联网连接,以发送上次位置更新的数据。
我把你在问题中发布的原始代码进行了修改:
public class MainActivity extends ActionBarActivity {
int route_number;
double pLong;
double pLat;
String time;
String jSONString;
boolean isConnected; //added
boolean locationUpdatedNoInternet; //added
long lastLocationTime = 0; //added
TextView textJSON;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textJSON = (TextView) findViewById(R.id.textJSON);
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener ll = new myLocationListener();
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, ll);
}
private class BroadcastReceiverListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(
android.net.wifi.WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
//code to get the strongest wifi access point in the JSON string the routes's value.
}
else if (intent.getAction().equals(
android.net.ConnectivityManager.CONNECTIVITY_ACTION)) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = connectivityManager
.getActiveNetworkInfo();
//set instance variable isConnected here instead of creating local variable
isConnected = netInfo != null
&& netInfo.isConnectedOrConnecting();
//boolean isConnected = netInfo != null
//&& netInfo.isConnectedOrConnecting();
if (isConnected) {
Toast.makeText(context,
"The device is connected to the internet ",
Toast.LENGTH_SHORT).show();
//check if we got a location update with no internet
long currTime = System.currentTimeMillis();
if (locationUpdatedNoInternet == true) {
//check that last location send was longer than 5 seconds ago
if (lastLocationTime == 0 || ((currTime - lastLocationTime) > 5000 )){
lastLocationTime = System.currentTimeMillis(); //set last sent time
locationUpdatedNoInternet = false; //re-set to false
PostData sender = new PostData();
//since we are checking locationUpdatedNoInternet flag, we definitely have location data.
System.out.println("The output of internet broadcast: " + jSONString);
sender.timer(jSONString);
textJSON.setText(jSONString);
}
}
} else {
Toast.makeText(context,
"Please connect the device to the internet.",
Toast.LENGTH_SHORT).show();
}
}
}
}
class myLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
if (location != null) {
pLong = location.getLongitude();
pLat = location.getLatitude();
//...
time = sdf.format(location.getTime());
jSONString = convertToJSON(pLong, pLat, time);
System.out.println("The output of onLocationChanged: "+ jSONString);
long currTime = System.currentTimeMillis();
if (isConnected == true) {
//check that last location send was longer than 5 seconds ago
if (lastLocationTime == 0 || ((currTime - lastLocationTime) > 5000 )) {
//if connected, just send the data
lastLocationTime = System.currentTimeMillis(); //set last sent time
locationUpdatedNoInternet = false;
PostData sender = new PostData();
sender.timer(jSONString);
textJSON.setText(jSONString);
}
}
else{
//set flag so that the last location update will be sent once connection is established
locationUpdatedNoInternet = true;
}
}
}
}
}
关于android - 当互联网连接可用时从 BoadcastReceiver 发送纬度和经度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29863769/
所以:我有以下函数,改编自在线找到的公式,它采用两个纬度/经度坐标并计算它们之间的距离(以英里为单位)(沿着球形地球): public static double distance (double l
我有一个给定点(经度、纬度),我想获取给定点 5 英里半径范围内的所有点范围? 最佳答案 我只是在这里猜测,但我认为您需要找到一种不同的方法。如果您尝试使用 Foursquare、Google map
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我找到了一些代码,用于将纬度/经度转换为给定图像上的像素,反之亦然。我将其移植到 JavaScript,但在纬度上得到了不正确的返回值。我测试了原始的、未修改的代码,它给出了同样的不准确之处。下面是带
我正在考虑使用 rChart/LeafLet 为我所在县的房屋销售创建一个 Shiny 的应用程序。在任何给定时间,都有数百套房屋出售。想要为所有人绘制街道地址到地理位置(纬度/经度)的 map 并将
是否有任何方法(任何 API 或任何 URL)仅通过传递区号(邮政编码)来查找经纬度? 最佳答案 Google map 地理编码器将仅根据邮政编码进行搜索。 这是一个例子:(和一个 fiddle 来查
我正在尝试使用 openlayers 中的方形多边形来获取边界框。我需要从框中获取 North、South、West 和 East 值。现在我正在使用: var topleft = vectors.f
下面的代码将在 map 中添加一个标记并在警报中显示其纬度/经度。 var note = document.getElementById('note'); var datepick = documen
如何将地址或城市转换为纬度/经度?我可以从哪些商业机构“租用”这项服务?这将用于具有全时互联网访问的 Windows PC 上的商业桌面应用程序。 最佳答案 Google 有一个地理编码 API,对于
我的地理位置字符串为 25°9'37"N 55°13'28"E。使用 JavaScript Regex 我想从上面的字符串中提取 Lat 和 Lng。谢谢。 最佳答案 Your first row c
考虑在 map 上有一个圆,其中心为 GLatLng (A),半径 (r) 以米为单位。 如何计算B位置的GLatLng?假设r平行于赤道。 使用 GLatLng.distanceFrom() 方法在
我有 CLLocation 对象,其中包含用户的当前位置,并且对于可以倾斜的矩形的每个角,我有 4 个纬度/经度对。现在我想检查 CLLocation 坐标是否在该矩形内。 以下是矩形的坐标 #def
我正在尝试使用以下代码获取用户当前的纬度/经度: LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SER
我在这里不合时宜,所以如果我没有正确/清楚地问这个问题,请原谅我。 我有一张用户表,每个用户都有经纬度。 我收到一个联邦机构的查询,它提供了这样的多边形或圆形: 38.47,-120.14 38.34
我刚刚开始使用 python 的 BeautifulSoup 包进行抓取。在我的代码中,我得到以下汤对象 >>> soupObj [u'$(function(){SEAT.PG.initDialog(
目前我想通过JDBC将我的GPS经纬度发送到MYSQL。为了检索 GPS 纬度,我使用了下面的代码,并且在 GPSTracker 类中有 GPS 跟踪器代码。这将在任何时候按下按钮来 toast 纬度
我想根据输入的源地址和目标地址画一条路线。我需要根据地址获取纬度/日志才能在 android 中绘制 map 。那么我如何根据输入的地址获取纬度/日志。 Geocoder geoCoder = ne
如何在 android map 上显示我从服务器收到的纬度和经度。我实现了 google map V2 但不知道如何在 map 上显示 gps 坐标。经过大量研究,我来到这里,但无法找到一个合理的解决
我的 Controller 中有以下代码。 .controller('MapCtrl', ['$scope', function initialize() {
我也四处搜寻,但没有发现任何真正有帮助的东西。情况如下: 假设我对城市和天气预报有一个简单的关系。我们可以与纬度和经度联系起来,因此我们可以得到以下结果: 城市表: cityId | name
我是一名优秀的程序员,十分优秀!