简单的短信监听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
- 简单的短信监听GPS信息
- Android中读取短信信息,短信监听的各种问题,实现监听短信的功能
- 安卓用ContentObserver监听发出的短信的信息日志
- 短信的监听
- android的GPS信息
- 短信、微信、QQ信息监听
- Android 使用ContentObserver监听短信的变化,并发送信息给特定的手机号码
- Android短信内容的监听
- android的日积月累-监听短信
- android 下的短信监听
- Android监听收到的短信
- ContentObserver监听发送的短信
- 监听接收到的短信
- GPS的临近警告发送短信提醒
- GPS定位信息的接收
- GPS定位信息的接收
- GPS定位信息的接收
- GPS导航模块数据的监听
- less css基础教程
- 参与到开源项目中乐趣
- linux文件权限详解
- 安装Qt时Basic XLib functionality test failed!错误解决方法
- 常见的面试问题
- 简单的短信监听GPS信息
- linux下通过命令行使用Vtune统计处理器微体系结构特征
- 腾讯 阿里实习生失败总结!~
- java 异常处理练习(毕向东)
- 定制iOS 7中的导航栏和状态栏
- 自己的电脑+wordpress+nat123搭建并发布个人博客网站
- sql server 如何通过mdf文件和ldf文件恢复数据库
- 开源软件贡献自己的力量
- 读书[资本之王]