知识点:
1 使用BroadcasterRecevier拦截系统短信息
2 使用service后台获取位置信息
1 使用BroadcasterRecevier拦截系统短信息
(1)添加短信息权限
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
(2)注册BroadcastRecevier
<receiver android:name="com.example.mobliesoft.receive.SmsRecevier">
<intent-filter android:priority="2147483647">
<!-- 监听短信事件 -->
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
注意:这里讲优先级设置为:android:priority="2147483647"为最高优先级。
(3)编写监听代码
package com.example.mobliesoft.receive;
import com.example.mobliesoft.R;
import com.example.mobliesoft.service.loactionservice;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.provider.MediaStore.Audio.Media;
import android.telephony.gsm.SmsManager;
import android.telephony.gsm.SmsMessage;
/**
* 广播监听短信接收
* @author admin
*
*/
public class SmsRecevier extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Object[] objects = (Object[])intent.getExtras().get("pdus");
for(Object object:objects)
{
SmsMessage message = SmsMessage.createFromPdu((byte[])object);
String originatingAddress = message.getOriginatingAddress(); //获取短信号码
String messageBody = message.getMessageBody().trim(); //获取短信内容
if("#*alarm*#".equals(messageBody))
{
System.out.println("启动音乐");
MediaPlayer mediaplayer = MediaPlayer.create(context, R.raw.ylzs);
mediaplayer.setVolume(1f, 1f);
mediaplayer.setLooping(true);
mediaplayer.start();
abortBroadcast();//阻断 禁止下传广播
}
if("#*location*#".equals(messageBody))
{
System.out.println("启动服务");
context.startService(new Intent(context,loactionservice.class));
SharedPreferences sharedPreferences = context.getSharedPreferences("config",context.MODE_PRIVATE);
String loactioncontent = sharedPreferences.getString("loaction", "");
System.out.println("location 坐标"+loactioncontent);
abortBroadcast();//阻断 禁止下传广ar播
}
System.out.println("当前短信: "+originatingAddress+" ; "+messageBody);
}
}
}
2 使用service后台获取位置信息
(1)添加获取位置提供者(GPS等)权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
(2)注册service
<service android:name="com.example.mobliesoft.service.loactionservice"></service>
(3)编写service代码
package com.example.mobliesoft.service;
import java.util.List;
import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
public class loactionservice extends Service {
private LocationManager LocationManager;
private android.location.LocationManager lm;
private MylocationListener mylocationListener;
private SharedPreferences sharedPreferences;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
lm = (LocationManager) getSystemService(LOCATION_SERVICE);//位置服务属于系统服务
List<String> allProviders = lm.getAllProviders();
mylocationListener = new MylocationListener();
Criteria criteria = new Criteria();
criteria.setAccuracy(criteria.ACCURACY_FINE);
criteria.setCostAllowed(true);
String bestProvider = lm.getBestProvider(criteria, true);//使用bestProvider作为自动坐标获得者
// 参数1 :位置提供者 参数2:最短更新时间 参数3 最短更新距离 参数4:listener
lm.requestLocationUpdates(bestProvider, 0, 0, mylocationListener);
sharedPreferences = getSharedPreferences("config", MODE_PRIVATE);
super.onCreate();
}
public class MylocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
double longitude = location.getLongitude();
double latitude = location.getLatitude();
float accuracy = location.getAccuracy();
double altitude = location.getAltitude();
sharedPreferences.edit().putString("location", location.getLongitude() + ";" + location.getLatitude())
.commit();//将经纬度保存在sharedPreference
System.out.println("longitude :" + longitude + "latitude :" + latitude + "altitude :" + altitude
+ "accuracy :" + accuracy);
stopSelf(); //关闭服务
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
// 打开关闭GPS时调用
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
@Override
public void onDestroy() {
lm.removeUpdates(mylocationListener); //结束时,将位置管理器销毁
super.onDestroy();
}
}
(4)在合适的地方启动service:
context.startService(new Intent(context,loactionservice.class));