简单的短信监听GPS信息

来源:互联网 发布:java图形化界面设计 编辑:程序博客网 时间:2024/05/06 00:45

今天写了个 简单的短信监听GPS信息 程序;作业的一部分啦,写完先扔上来求评价,还有如果没有Activity的话可能导致功能失效先记下来;

以下部分代码:

/**
 * @author
 *         开机启动的广播,直接启动service
 */
public class bdReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {
Intent tintent = new Intent(context, GpsService.class);
context.startService(tintent);
// TODO Auto-generated method stub


}


// 短信监听

@Override
public void onReceive(Context context, Intent intent) {
preferences = context.getSharedPreferences("key", context.MODE_PRIVATE);
editor = preferences.edit();
// 获得存储的号码及状态
num = preferences.getString("num", "10086");// 652962
status = preferences.getBoolean("status", false);
// 这个收到广播测试用
Toast.makeText(context, "收到短信啦啦啦~~~", Toast.LENGTH_SHORT).show();
// 如果是收到短信
if (intent.getAction()
.equals("android.provider.Telephony.SMS_RECEIVED")) {
// 获得短信内容
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];


for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}


for (SmsMessage message : messages) {
// 得到短信来源及内容
address = message.getDisplayOriginatingAddress();
msg = message.getDisplayMessageBody();
// 若来源是设定号码
if (num.equals(address)) {
// 字符串解析
String title = "";
String order = "";
int k = msg.length();
for (int i = 0; i < k; i++) {
if (msg.substring(i, i + 1).equals(":")
|| msg.substring(i, i + 1).equals(";")
|| msg.substring(i, i + 1).equals(",")
|| msg.substring(i, i + 1).equals(".")
|| msg.substring(i, i + 1).equals("=")


) {
title = msg.substring(0, i).trim();
order = msg.substring(i + 1, k).trim();
}


}
// 指令判断
if (title.equals("ctrl")) {// ctrl 控制状态开关
abortBroadcast();// 取消广播
if (order.equals("open")) {
status = true;
Intent tintent = new Intent(context,
GpsService.class);
context.startService(tintent);
} else if (order.equals("close")) {
status = false;
} else if (order.equals("1")) {
status = true;
Intent tintent = new Intent(context,
GpsService.class);
context.startService(tintent);
} else if (order.equals("0")) {
status = false;
}
// 将状态开关保存下来
editor.putBoolean("status", status);
// 提交数据
editor.commit();


} else if (title.equals("changeNum")) {// changeNum 更改号码
abortBroadcast();// 取消广播
num = order;
editor.putString("num", num);
editor.commit();


} else if (title.equals("time")) {// time 更改发送间隔
abortBroadcast();// 取消广播
editor.putString("time", order);
editor.commit();
}


} else
;// 不是来自指定号码,不处理。


}


}


}


}


//service监听GPS信息

@Override
public void onCreate() {
super.onCreate();
// 一些初始化
preferences = getSharedPreferences("key", MODE_PRIVATE);
num = preferences.getString("num", "10086");
time = Integer.parseInt(preferences.getString("time", "60"));// 缺省值默认1分钟
status = preferences.getBoolean("status", false);


sManager = SmsManager.getDefault();
locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = locManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
updateData(location);


locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
60 * 1000, 8, new LocationListener() {// 没60秒更新一次


@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
// TODO Auto-generated method stub


}


@Override
public void onProviderEnabled(String provider) {
// GPS可用更新经纬度
updateData(locManager.getLastKnownLocation(provider));
}


@Override
public void onProviderDisabled(String provider) {
// GPS不可用重置信息
updateData(null);
}


@Override
public void onLocationChanged(Location location) {
// 位置信息改变更新经纬度
updateData(location);
}
});


}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "onStartCommand", Toast.LENGTH_SHORT).show();
// 消息队列
handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 0) {
sManager.sendTextMessage(num, null, "longitude:"
+ longitude + ",latitude" + latitude, null, null);
status = preferences.getBoolean("status", false);
time = Integer
.parseInt(preferences.getString("time", "60"));
}
}


};


new Thread() {
// 子线程每隔time分钟发送一个信息
public void run() {
while (status) {
handler.sendEmptyMessage(0);
try {
// 睡眠time m
Thread.sleep(time * 1000 * 60);
} catch (Exception e) {
e.printStackTrace();
}


}
}
}.start();


return super.onStartCommand(intent, flags, startId);
}

/**
*  用于更新gps信息
*/
public void updateData(Location newLocation) {
if (newLocation != null) {
longitude = newLocation.getLongitude();
latitude = newLocation.getLatitude();
} else {


}


}


//涉及权限



    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />



下载地址:

http://download.csdn.net/detail/u014196025/7253247

0 0
原创粉丝点击