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

知识点:

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值