在service中写一个新线程用来上传文件,还没测试通不通。先把代码放上来~
public class WifiService extends Service { public static final String WIFISERVICE_ACTION = "com.smartapp.service.WifiService"; private static final String TAG = "WIFI_SERVICE"; private WifiManager mWifiManager; private List<ScanResult> mWifiList; private boolean isOpen = true; private Handler handler; private Runnable runnable; private BroadcastReceiver batteryBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (TextUtils.equals(intent.getAction(), intent.ACTION_BATTERY_CHANGED)) { int currentBattery = intent.getIntExtra("level", 0); int totalBattery = intent.getIntExtra("scale", 1); Log.v(TAG, "ACTION_BATTERY_CHANGED"); Log.v(TAG, currentBattery * 100 / totalBattery + "%"); } } }; @Override public void onCreate() { super.onCreate(); mWifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); Log.v(TAG, String.valueOf(mWifiManager.getWifiState())); IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); registerReceiver(batteryBroadcastReceiver, filter); openWifi(); handler = new Handler(); runnable = new Runnable() { @Override public void run() { startScanWifi(); //每隔10s,扫描一次 // handler.postDelayed(this, 10000); } }; handler.postDelayed(runnable, 0); } @Override public void onDestroy() { super.onDestroy(); closeWifi(); unregisterReceiver(batteryBroadcastReceiver); handler.removeCallbacks(runnable); } @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } public void openWifi() { if (!mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(true); isOpen = false; } } public void closeWifi() { if (mWifiManager.isWifiEnabled() && !isOpen) { mWifiManager.setWifiEnabled(false); } } public void startScanWifi() { Log.v(TAG, String.valueOf(System.currentTimeMillis())); mWifiManager.startScan(); mWifiList = mWifiManager.getScanResults(); Log.v(TAG, String.valueOf(System.currentTimeMillis())); Log.v(TAG, String.valueOf(mWifiList));
<span style="white-space:pre"> </span><span style="color:#ff9900;">//先生成一个文件存储在SD卡</span>
final File file = new File(Environment.getExternalStorageDirectory().getPath()+ "/wifiList"+refFormatNowDate()+".txt"); try { if (!file.exists()) { file.createNewFile(); } RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw"); randomAccessFile.seek(file.length()); randomAccessFile.writeBytes(refFormatNowDate()); randomAccessFile.writeBytes("\r\n"); randomAccessFile.writeBytes(String.valueOf(mWifiList)); randomAccessFile.writeBytes("\r\n"); randomAccessFile.close(); } catch (IOException e) { e.printStackTrace(); } <span style="color:#ff9900;">//以下是新线程,用http上传文件</span> Thread t = new Thread(){ private URL url; private String content; private int TIME_OUT = 60 * 1000; private String PREFIX = "--"; private String LINE_END = "\r\n"; private String BOUNDARY = UUID.randomUUID().toString(); private String TAG = "UPLOAD"; private String CHARSET = "utf-8"; public String backMsg = ""; private Handler handler; private BufferedReader in; public void run(){ try { url = new URL("");<span style="color:#ff9900;">//此处写后台url代码</span> HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(TIME_OUT); conn.setConnectTimeout(TIME_OUT); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "multipart/form-data" + ";boundary=" + BOUNDARY); Log.v("yizhuang", "BOUNDARY: " + BOUNDARY); // conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); conn.setRequestProperty("Charsert", "UTF-8"); // conn.setUseCaches(true); // System.setProperty("http.keepAlive", "false"); conn.setDoOutput(true); conn.setDoInput(true); conn.setDoOutput(true); conn.setDoInput(true); DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); StringBuffer sb = new StringBuffer(); sb.append(PREFIX); sb.append(BOUNDARY); sb.append(LINE_END); sb.append("Content-Disposition: form-data; name=\"" + content + "\"; filename=\"" + file.getName() + "\"" + LINE_END); sb.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINE_END); sb.append(LINE_END); dos.write(sb.toString().getBytes()); Log.e(TAG, sb.toString()); InputStream is = new FileInputStream(file);<span style="color:#ff9900;">//将file上传到后台</span> byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) != -1) { dos.write(buffer, 0, len); } dos.write(LINE_END.getBytes()); Log.w(TAG, "dos.write pic"); byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END) .getBytes(); dos.write(end_data); Log.w(TAG, "dos.write end data"); dos.flush(); Log.w(TAG, "flush"); Log.e(TAG, "request success"); in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { backMsg = line; } if (backMsg.equals("success")) { //file.delete(); } Log.e("wifi", "reading:" + backMsg); is.close(); dos.close(); in.close(); Message msg = new Message(); msg.what = 0x777; msg.obj = backMsg; handler.sendMessage(msg); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; t.start(); } public String refFormatNowDate() { Date nowTime = new Date(System.currentTimeMillis()); SimpleDateFormat sdFormatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String retStrFormatNowDate = sdFormatter.format(nowTime); return retStrFormatNowDate; } }