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

Android 码拜 5年前 (2016-06-07) 628次浏览
目前情况:
做了一个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();
}
}

解决方案

20

用的wifi 么?
wifi里面有设置 熄屏后多久关闭,你可以设置永不关闭

20

楼上的正解,补充一下设置方法
1. 进入  设置——无线和网络——WLAN设置
2. 按菜单键(meun)——选择高级
3. WLAN休眠策略——永不休眠

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Android程序后台运行访问网络问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)