mqtt 怎么实现android以后台service的方式获取gps数据,并定时发送到服务器

mqtt 怎么实现android以后台service的方式获取gps数据,并定时发送到服务器,第1张

1 从Service继承一个类。

2 创建startService()方法

3 创建endService()方法 重载onCreate方法和onDestroy方法,并在这两个方法里面来调用startService以及endService。

4 在startService中,通过getSystemService方法获取ContextLOCATION_SERVICE。

5 基于LocationListener实现一个新类。默认将重载四个方法onLocationChanged、onProviderDisabled、onProviderEnabled、onStatusChanged。对于onLocationChanged方法是我们更新最新的GPS数据的方法。一般我们的操作都只需要在这里进行处理。

6 调用LocationManager的requestLocationUpdates方法,来定期触发获取GPS数据即可。在onLocationChanged函数里面可以实现我们对得到的经纬度的最终操作。

7 最后在我们的Activity里面通过按钮来启动Service,停止Service。

示意代码如下:

package comoffbyegpsservice;

import androidappService;

import androidcontentContext;

import androidcontentIntent;

import androidlocationLocationListener;

import androidlocationLocationManager;

import androidosBinder;

import androidosIBinder;

import androidutilLog;

public class GPSService extends Service {

// 2000ms

private static final long minTime = 2000;

// 最小变更距离10m

private static final float minDistance = 10;

String tag = thistoString();

private LocationManager locationManager;

private LocationListener locationListener;

private final IBinder mBinder = new GPSServiceBinder();

public void startService() {

locationManager = (LocationManager) getSystemService(ContextLOCATION_SERVICE);

locationListener = new GPSServiceListener();

locationManagerrequestLocationUpdates(LocationManagerGPS_PROVIDER, minTime, minDistance,

locationListener);

}

public void endService() {

if (locationManager != null && locationListener != null) {

locationManagerremoveUpdates(locationListener);

}

}

@Override

public IBinder onBind(Intent arg0) {

// TODO Auto-generated method stub

return mBinder;

}

android里面,通过json数据是不会直接返回的,只会返回的url地址。

步骤: 1,通过解析json数据,获取到的地址。

2,通过的地址,再一次的请求网络(用异步任务或者hangdler里面请求网络:比如:

URL url = new URL(urlStr);

HttpURLConnection conn = (HttpURLConnection) urlopenConnection();

BufferedInputStream is = new BufferedInputStream(conngetInputStream());

3 通过BitmapFactorydecodeStream(里面的参数是一个字节流),该方法返回的是一个bitmap ,直接用imageviewsetimagebitmap()就能展示了。

说明: 在BitmapFactorydecodeStream这里返回的bitmap可以做进一步的优化,比如二次采样,把获取的bitmap存sd卡等等。。

  为了实现对数据库版本进行管理,SQLiteOpenHelper类提供了两个重要的方法,分别是onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),前者用于初次使用软件时生成数据库表。

  后者用于升级软件时更新数据库表结构。当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreate()方法,onCreate()方法在初次生成数据库时才会被调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。

  onUpgrade()方法在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号,而数据库的版本是由程序员控制的,假设数据库现在的版本是1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新用户手机里的数据库表结构,为了实现这一目的,可以把原来的数据库版本设置为2,并且在onUpgrade()方法里面实现表结构的更新。

  当软件的版本升级次数比较多,这时在onUpgrade()方法里面可以根据原版号和目标版本号进行判断,然后作出相应的表结构及数据更新。

Android 客户端代码:

package comltbSCActivity;

import javaioBufferedReader;

import javaioBufferedWriter;

import javaioIOException;

import javaioInputStreamReader;

import javaioOutputStreamWriter;

import javaioPrintWriter;

import javanetSocket;

import androidappActivity;

import androidosBundle;

import androidosHandler;

import androidosMessage;

import androidutilLog;

import androidviewView;

import androidviewViewOnClickListener;

import androidwidgetButton;

import androidwidgetEditText;

import androidwidgetTextView;

public class SCActivity extends Activity {

private TextView mRecvText = null;

private EditText mSentText = null;

private Button mSendRecvButton = null;

private Socket mSocket = null;

/ Called when the activity is first created /

@Override

public void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutmain);

mRecvText = (TextView)findViewById(RidrecvText);

mSentText = (EditText)findViewById(RidsentText);

mSendRecvButton = (Button)findViewById(RidsendRecvButton);

mSendRecvButtonsetOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

String sentMessage = mSentTextgetText()toString() + "\r\n";

try {

mSocket = new Socket("1012638155", 12577);

Logi("------SCActivity---before send---", sentMessage);

PrintWriter send = new PrintWriter(new BufferedWriter(new OutputStreamWriter(mSocketgetOutputStream())));

sendprintln(sentMessage);

sendflush(); //Important!!!!!!

//sendwrite(sentMessage);

Logi("------SCActivity---after send---", sentMessage);

BufferedReader recv = new BufferedReader(new InputStreamReader(mSocketgetInputStream()));

Logi("------SCActivity---Before ---recvreadLine()---", sentMessage);

String recvMsg = recvreadLine();

Logi("------SCActivity---after ---recvreadLine()---", recvMsg);

if (recvMsg != null) {

mRecvTextsetText(recvMsg);

} else {

mRecvTextsetText("Cannot receive data correctly");

}

sendclose();

recvclose();

mSocketclose();

} catch (Exception ex) {

exprintStackTrace();

}

}

});

}

服务器端代码:

import javaioBufferedReader;

import javaioBufferedWriter;

import javaioInputStreamReader;

import javaioOutputStreamWriter;

import javaioPrintWriter;

import javanetServerSocket;

import javanetSocket;

public class Server implements Runnable {

public void run() {

try {

ServerSocket serverSocket = new ServerSocket(12577);

while (true) {

Socket client = serverSocketaccept();

Systemoutprintln("accept");

try {

BufferedReader in = new BufferedReader(new InputStreamReader(clientgetInputStream()));

String str = inreadLine();

Systemoutprintln("read:" + str);

PrintWriter pout = new PrintWriter(new BufferedWriter(new OutputStreamWriter(clientgetOutputStream())), true);

//poutwrite("Server Received Message: " + str);

poutprintln("Server Received Message: " + str);

Systemoutprintln("after send in server");

/ BufferedReader in = new BufferedReader(new InputStreamReader(clientgetInputStream()));

String str = inreadLine();

Systemoutprintln("read:" + str);/

poutclose();

inclose();

} catch (Exception e) {

Systemoutprintln(egetMessage());

eprintStackTrace();

} finally {

clientclose();

Systemoutprintln("close");

}

}

} catch (Exception e) {

Systemoutprintln(egetMessage());

}

}

public static void main(String argv[] ) {

Thread pcServerThread = new Thread(new Server());

pcServerThreadstart();

}

}

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » mqtt 怎么实现android以后台service的方式获取gps数据,并定时发送到服务器

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情