Android程序后台运行访问网络问题

hp640d4 2015-12-16 11:54:14
目前情况:
做了一个Android的APP,使用Service把个人的地理位置手机号等信息发送给服务器,但是目前发现了一个问题,手机没锁屏黑屏的时候,能上传数据,锁屏后一段时间之后,程序就没法网上发数据了,出现
W/System.err(10559): org.apache.http.conn.HttpHostConnectException: Connection to http://192.168.1.114:8080 refused
W/System.err(10559): Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
的错误,不知道该怎么解决了,求大神帮忙

package com.example.workerlocation;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.TimeZone;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
import com.baidu.location.Poi;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.telephony.TelephonyManager;
import android.util.Log;

public class ServiceCrack extends Service{
Boolean hasStartThread = false;
public IBinder onBind(Intent arg0){
return null;
}
private final int CONNECT_THREAD = 0;
public LocationClient mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener();
private Handler mHandler;
public void onCreate(){
super.onCreate();
if(!hasStartThread){//如果是进程未启动,则启动一个新的进程
new connectThread().start();//新建并启动connectThread实例
mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类

LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
int span=1000*10;
option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);//可选,默认false,设置是否使用gps
option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
option.setIsNeedLocationPoiList(false);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);//可选,默认false,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认杀死
option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
mLocationClient.setLocOption(option);
mLocationClient.registerLocationListener( myListener ); //注册监听函数
mLocationClient.start();
hasStartThread = true;//进程启动之后,更新标志位
}
}

/**
* 获得手机号
*
*/
public String getPhoneNum() {
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String phone = tm.getLine1Number();
return phone;
}

//定位监听实现定时监听位置信息,然后调用Handler处理上传数据
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
String locationStr = location.getLongitude()+";"+location.getLatitude();
mHandler.obtainMessage(CONNECT_THREAD, locationStr).sendToTarget();
}
}

class connectThread extends Thread {
@Override
public void run() {
//建立消息循环的步骤
Looper.prepare();//1、初始化Looper
mHandler = new Handler(){//2、绑定handler到CustomThread实例的Looper对象
public void handleMessage (Message connectInfoMsg) {//3、定义处理消息的方法
if(connectInfoMsg.what==0){
String locationInfoStr = connectInfoMsg.obj.toString();
String[]locationInfoArg = null;
if(locationInfoStr.indexOf(";")>-1){
locationInfoArg = locationInfoStr.split(";");
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8:00"));
java.text.SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
Calendar cal1 = Calendar.getInstance();
String updateTime = sdf.format(cal1.getTime());

String baseURL = "http://";
//下面写请求服务器的代码} }
try {

NameValuePair pair1 = new BasicNameValuePair("Longitude", locationInfoArg[0]+"");
NameValuePair pair2 = new BasicNameValuePair("Latitude", locationInfoArg[1]+"");
NameValuePair pair3 = new BasicNameValuePair("Phone", getPhoneNum());
NameValuePair pair4 = new BasicNameValuePair("Time", updateTime);
List<NameValuePair> pairList = new ArrayList<NameValuePair>();
pairList.add(pair1);
pairList.add(pair2);
pairList.add(pair3);
pairList.add(pair4);
HttpEntity requestHttpEntity = new UrlEncodedFormEntity(pairList);
// URL使用基本URL即可,其中不需要加参数
HttpPost httpPost = new HttpPost(baseURL);
// 将请求体内容加入请求中
httpPost.setEntity(requestHttpEntity);
// 需要客户端对象来发送请求
HttpClient httpClient = new DefaultHttpClient();
// 发送请求
HttpResponse response = httpClient.execute(httpPost);
System.out.println(response.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
};
Looper.loop();//4、启动消息循环
}
}

@Override
public void onDestroy() {
mLocationClient.stop();
super.onDestroy();
}


}
...全文
4712 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sugar先生 2017-01-04
  • 打赏
  • 举报
回复
引用 9 楼 qq_28918055 的回复:
小米手机--设置--其他高级设置--电源和性能--神隐模式 标准(限制后台应用的网络和定位功能) 关闭(不限制后台应用的功能) 默认是标准,在屏保后4分钟左右会限制后台应用的网络功能
这个问题搞了半个月了,原来是小米系统搞的鬼,感谢
luoboshiwo 2016-10-20
  • 打赏
  • 举报
回复
妈蛋,被同一个问题坑到,掉坑里好几天
卓凡姓黎 2016-10-10
  • 打赏
  • 举报
回复
引用 9 楼 qq_28918055 的回复:
小米手机--设置--其他高级设置--电源和性能--神隐模式 标准(限制后台应用的网络和定位功能) 关闭(不限制后台应用的功能) 默认是标准,在屏保后4分钟左右会限制后台应用的网络功能
大牛!太爱你了!垃圾小米坑死我
benshiqiao676 2016-09-13
  • 打赏
  • 举报
回复
引用 9 楼 qq_28918055 的回复:
小米手机--设置--其他高级设置--电源和性能--神隐模式 标准(限制后台应用的网络和定位功能) 关闭(不限制后台应用的功能) 默认是标准,在屏保后4分钟左右会限制后台应用的网络功能
卧槽,原来是这个问题啊,小米的系统越来越垃圾了,迟早倒闭
CHIlei0838 2016-09-04
  • 打赏
  • 举报
回复
这贴就了我,感谢哥们~~~~~
yzx0xyz 2016-08-17
  • 打赏
  • 举报
回复
引用 9 楼 qq_28918055 的回复:
小米手机--设置--其他高级设置--电源和性能--神隐模式 标准(限制后台应用的网络和定位功能) 关闭(不限制后台应用的功能) 默认是标准,在屏保后4分钟左右会限制后台应用的网络功能
怒赞!!!!!! 我说App怎么到后台一会儿就被切掉网络了,原来如此。
Tconan99 2016-04-26
  • 打赏
  • 举报
回复
引用 9 楼 qq_28918055 的回复:
小米手机--设置--其他高级设置--电源和性能--神隐模式 标准(限制后台应用的网络和定位功能) 关闭(不限制后台应用的功能) 默认是标准,在屏保后4分钟左右会限制后台应用的网络功能
太有用了,找了半个月了。。。
DaiShanQi 2016-04-25
  • 打赏
  • 举报
回复
小米手机--设置--其他高级设置--电源和性能--神隐模式 标准(限制后台应用的网络和定位功能) 关闭(不限制后台应用的功能) 默认是标准,在屏保后4分钟左右会限制后台应用的网络功能
wangcan05528845048 2016-04-09
  • 打赏
  • 举报
回复
哥么,解决了吗
烦恼的胖子猪 2016-02-03
  • 打赏
  • 举报
回复
解决没,哥们,我也是这个问题!
杨二狗 2016-01-12
  • 打赏
  • 举报
回复
哥们解决了吗? 怎么弄得
hp640d4 2015-12-16
  • 打赏
  • 举报
回复
擦 手机端照片发不上来啊
hp640d4 2015-12-16
  • 打赏
  • 举报
回复
今天我增加了一段打印网络状态的代码,发现不黑屏的时候,程序后台运行一段时间后,也没法访问网络了
hp640d4 2015-12-16
  • 打赏
  • 举报
回复
引用 3 楼 hp640d4的回复:
今天我增加了一段打印网络状态的代码,发现不黑屏的时候,程序后台运行一段时间后,也没法访问网络了
这个是截图,可以看下我的网络设置
ghchen 2015-12-16
  • 打赏
  • 举报
回复
楼上的正解,补充一下设置方法 1. 进入 设置——无线和网络——WLAN设置 2. 按菜单键(meun)——选择高级 3. WLAN休眠策略——永不休眠
sanxiaochengyu 2015-12-16
  • 打赏
  • 举报
回复
用的wifi 么? wifi里面有设置 熄屏后多久关闭,你可以设置永不关闭

80,467

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧