使用BroadcasterRecevier拦截系统短信息_使用service后台获取位置信息

来源:互联网 发布:软件技术服务招聘 编辑:程序博客网 时间:2024/06/06 10:53

知识点:

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 {@Overridepublic 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;@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturn null;}@Overridepublic 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:listenerlm.requestLocationUpdates(bestProvider, 0, 0, mylocationListener);sharedPreferences = getSharedPreferences("config", MODE_PRIVATE);super.onCreate();}public class MylocationListener implements LocationListener {@Overridepublic 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();//将经纬度保存在sharedPreferenceSystem.out.println("longitude :" + longitude + "latitude :" + latitude + "altitude :" + altitude+ "accuracy :" + accuracy);stopSelf(); //关闭服务}@Overridepublic void onProviderDisabled(String provider) {// TODO Auto-generated method stub}// 打开关闭GPS时调用@Overridepublic void onProviderEnabled(String provider) {// TODO Auto-generated method stub}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {// TODO Auto-generated method stub}}@Overridepublic void onDestroy() {lm.removeUpdates(mylocationListener); //结束时,将位置管理器销毁super.onDestroy();}}

(4)在合适的地方启动service:

 context.startService(new Intent(context,loactionservice.class));



0 0