知识点:

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));



更多相关文章

  1. android获取应用信息,判断应用来源,监听应用的安装和卸载
  2. android动态加载外部资源文件
  3. Android下在onCreate方法中获取TextView的高度
  4. Android(安卓)QQ第三方登录
  5. android arcgis(100.0.0)ArcGISMapImageLayer 图片图层点击查询要
  6. Android获取窗口可视区域大小: getWindowVisibleDisplayFrame()
  7. java获取http:图片下载代码――android基础编
  8. Android(安卓)ActionBar使用方法
  9. Android文件或文件夹内容改变监听器(FileObserver)

随机推荐

  1. android中的Handler和Callback机制
  2. Android(安卓)条码扫描器 一维条形码 二
  3. Android(安卓)5.0 之SwipeRefreshLayout
  4. Android(安卓)装载器---例子
  5. 查看ANR日志
  6. android 生成pdf文件
  7. 控制seekBar的进度颜色
  8. Android(安卓)内置应用截屏方法
  9. Android(安卓)弹出式布局之Dialog源码分
  10. FFmpeg学习—android 利用ffmpeg 录制ogg