6,721
社区成员
发帖
与我相关
我的任务
分享
package net.gps;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
/**
* Gps服务接收器
*
* @author *
*/
public class GpsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Log.d("GpsReceiver", "GPS服务接收器准备就绪..");
Intent intents = new Intent(context, GpsService.class);
intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startService(intents);
}
}
}
package net.gps;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
/**
* GPS数据信息服务
*
* @author *
*/
public class GpsService extends Service {
private LocationManager mLocationManager;
private GpsInfo mGpsInfo;
private String Url = "http://222.134.70.82:10002/gpstest/Default.aspx";
/**
* GPS监听
*/
private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
Log.d("", "onLocationChanged..");
try {
if (location != null) {
Log.d("", "INonLocationChanged..");
mGpsInfo = new GpsInfo();
mGpsInfo.setAddTime(GpsTools.getTime());
mGpsInfo.setCoorX(location.getLatitude());
mGpsInfo.setCoorY(location.getLongitude());
mGpsInfo.setSpeed(location.getSpeed() / 1000.0f / 3600f);
addGps(mGpsInfo);
}
} catch (Exception e) {
Log.e("onLocationChanged", "", e);
}
}
// 如果requestLocationUpdates关闭被调用则立即调用该方法
public void onProviderDisabled(String provider) {
mLocationManager.setTestProviderEnabled(provider, false);
mGpsInfo = null;
}
public void onProviderEnabled(String provider) {
try {
Log.d("", "onProviderEnabled..");
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
// GPS是否开启
if (mLocationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER)
|| mLocationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
Log.d("", "InonProviderEnabled..");
Location location = mLocationManager
.getLastKnownLocation(provider);
mGpsInfo = new GpsInfo();
mGpsInfo.setAddTime(GpsTools.getTime());
mGpsInfo.setCoorX(location.getLatitude());
mGpsInfo.setCoorY(location.getLongitude());
mGpsInfo.setSpeed(location.getSpeed() / 1000.0f / 3600f);
addGps(mGpsInfo);
}
} catch (Exception e) {
Log.e("onProviderEnabled", "", e);
}
}
public void onStatusChanged(String provider, int status, Bundle extras) {
try {
if (status == LocationProvider.AVAILABLE) {
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
Log.d("", "onStatusChanged..");
// GPS是否开启
if (mLocationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER)
|| mLocationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
Log.d("", "InonStatusChanged..");
Location location = mLocationManager
.getLastKnownLocation(provider);
mGpsInfo = new GpsInfo();
mGpsInfo.setAddTime(GpsTools.getTime());
mGpsInfo.setCoorX(location.getLatitude());
mGpsInfo.setCoorY(location.getLongitude());
mGpsInfo.setSpeed(location.getSpeed() / 1000.0f / 3600f);
addGps(mGpsInfo);
}
}
} catch (Exception e) {
Log.e("onStatusChanged", "", e);
}
}
};
/**
* 服务创建
*/
@Override
public void onCreate() {
Log.d("", "onCreate启动服务..");
super.onCreate();
Config.context = this;
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
|| mLocationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
Log.d("", "InonCreate启动服务..");
String provider = mLocationManager.getBestProvider(criteria, true);
Location location = mLocationManager.getLastKnownLocation(provider);
if (location != null) {
mGpsInfo = new GpsInfo();
mGpsInfo.setAddTime(GpsTools.getTime());
mGpsInfo.setCoorX(location.getLatitude());
mGpsInfo.setCoorY(location.getLongitude());
mGpsInfo.setSpeed(location.getSpeed() / 1000.0f / 3600f);
addGps(mGpsInfo);
}
mLocationManager.requestLocationUpdates(provider, 5000, 1,
locationListener);
}
}
/**
* addGps
*/
private void addGps(GpsInfo mGpsInfo) {
try {
String replyInfo = null;
URL url = new URL(Url);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(
connection.getOutputStream(), "UTF-8");
out.write("imsinum=" + CommonUtil.getDeviceID() + "&coorx="
+ mGpsInfo.getCoorX() + "&coory=" + mGpsInfo.getCoorY()
+ "&speed=" + mGpsInfo.getSpeed());
out.flush();
out.close();
DataInputStream in = new DataInputStream(
connection.getInputStream());
replyInfo = in.readLine();
Log.e("return message:", replyInfo);
in.close();
} catch (IOException ex2) {
Log.e("return message:", " exe IOException:" + ex2.toString());
}
}
/**
* 开始服务
*/
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
/**
* 销毁服务
*/
@Override
public void onDestroy() {
super.onDestroy();
try {
mLocationManager.removeUpdates(locationListener);
mLocationManager.setTestProviderEnabled("gps", false);
} catch (Exception e) {
Log.d("", "", e);
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.gps" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="7" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<!--配置开机自动运行gps接收器服务程序 -->
<receiver android:name=".GpsReceiver" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
<activity android:name=".AndroidGpsServerActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".GpsService" />
</application>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_GPS">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_LOCATION">
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
</uses-permission>
</manifest>