Android实例-手机安全卫士(三十)-根据指令完成相应操作一(报警音乐和GPS追踪)

一、目标

  根据安全号码发送的指令完成相应的操作。

技术分享                    技术分享

二、代码实现

  1、完成播放报警音乐操作

    ①.在res文件夹下新建名为raw文件夹,并将音频文件拷贝至该文件夹下;

    ②.在播放报警音乐命令代码处(即SMSReceiver类中的else if("#*alarm*#".equals(body))里面),通过MediaPlayer对象的create(Context context(上下文), int resid(资源文件id))方法创建一个MediaPlayer对象,参数resid就是刚才的raw文件夹下的音频文件(注意在导R.raw包时要导项目文件包,非android.R包)

    ③.调用MediaPlayer对象的start()方法播放音频,其他setLooping(boolean looping)方法、setVolume(float leftVolume, float rightVolume)方法分别用于设置循环播放、左右声道音量。

代码如下:

技术分享
1 //播放报警音乐
2                     //Toast.makeText(context, "已播放报警音乐", Toast.LENGTH_SHORT).show();
3                     MediaPlayer player = MediaPlayer.create(context, R.raw.warning);
4                     player.setLooping(false);
5                     player.setVolume(1.0f, 1.0f);
6                     player.start();
7                     abortBroadcast();
View Code

 

  2、完成获取GPS位置操作

    ①.GPS位置的最好采用服务进行,所以在src文件夹下新建service包(取名com.example.mobilesafe.service),主要用于存放各类服务;

    ②.新建类(取名GPSService)用于实现GPS服务,并继承系统的Service,然后在功能清单文件(AndroidManifest.xml)中注册服务;

注册代码如下:

技术分享
1 <service android:name="com.example.mobilesafe.service.GPSService"></service>
View Code

 

    ③.在新建的服务类(GPSService)中复写onCreate()方法和onDestroy() 方法,定义LocationManager对象(取名lm),

    ④.在新建的服务类(GPSService)的onCreate()方法,

      1).通过getSystemService(String name)方法获取系统服务,参数name为LOCATION_SERVICE(位置服务)并强转成LocationManager;(额外知识点:通过LocationManager对象的getAllProviders()方法可以获取所有定位的方式(主要为网络定位、基站定位和GPS定位),该方法返回值类型为String类型的list数组,遍历这个数组便可得到定位方式)

      2).通过LocationManager对象(变量名lm)的requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)方法更新位置变化,参数一provider为定位方式,参数二minTime多少时间更新(毫秒为单位,0表示忽略),参数三minDistance位置变化多少米更新(米为单位,0表示忽略),参数四listener位置监听器(接口,需要实现);

        对于参数一provider(定位方式)可通过LocationManager对象(变量名lm)的getBestProvider(Criteria criteria, boolean enabledOnly(是否为可以的))方法获取最优的定位方式,参数Criteria criteria为最优定位方式的选择标准,可以通过Criteria对象的setXXX方法设置最大精度(Accuracy)、对电量的要求(PowerRequirement)、是否付费(CostAllowed)、海拔信息(Altitude)等。

代码如下:

技术分享
1 Criteria criteria = new Criteria();
2         criteria.setAccuracy(Criteria.ACCURACY_FINE);
3         String bestProvider = lm.getBestProvider(criteria, true);
4         lm.requestLocationUpdates(bestProvider, 0, 0, listener);
View Code

 

    ⑤.新建类(取名MyLocationListener)实现位置监听器接口(LocationListener),实现其未实现的四个方法:1.onLocationChanged(Location location) 当位置变化的时候回调该方法、2.onStatusChanged(String provider, int status, Bundle extras) 当状态变化(定位开启或关闭)的时候调用该方法、3.onProviderEnabled(String provider)  当三类定位方式中的某一个可以使用时调用该方法、4.onProviderDisabled(String provider) 当三类定位方式中的某一个不可使用时调用该方法。定义变量并通过new使其实例化。   

      在onLocationChanged(Location location) 位置变化的回调方法中

      1).通过location对象的getLatitude()方法获取位置标准的纬度(double类型,可加“”成String类型),getLongitude()方法获取位置标准的纬度,getAccuracy()方法获取精确度

          注意:此时获得的是标准的经纬度,该经纬度与地图(Google地图)上的坐标还是有一定偏差的,因此,需要将该经纬度进行转化,具体详见“火星坐标”章节介绍。

      2).通过SharedPreferences对象将最后的坐标位置以键值对的形式保存至“config”文件中;

保存代码如下:

技术分享
1 //通过SharedPreferences对象将最新的位置坐标保存以键值对的形式至config文件中
2             SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
3             Editor editor = sp.edit();
4             editor.putString("lastlocation", latitude+longitude+accuracy);
5             editor.commit();
View Code

 

    ⑤.在新建的服务类(GPSService)的onDestroy()方法中,当服务销毁时取消位置服务的监听,即复写Activity的onDestroy()方法,并通过LocationManager对象的removeUpdates(LocationListener listener)移除监听,同时将监听器设为空(null),以节约资源。

    ⑥.在短信接受器(SMSReceiver)类中的短信内容为“获取GPS位置("#*location*#".equals(body))”时

      1).通过Intent(Context packageContext, Class<?> cls)的startService(Intent service)方法启动刚新建的GPS服务类;

启动GPS服务代码如下:

技术分享
1 //启动GPS服务
2                     Intent intentGPS = new Intent(context, GPSService.class);
3                     context.startService(intentGPS);
View Code

      2).通过SharedPreference对象获取最新的位置坐标,并判断所获取的坐标值是否为空,若为空则说明还未获取到位置,可通过SmsManager对象的sendTextMessage(String destinationAddress(收件人,此处为sender即安全号码), String scAddress, String text(短信内容), PendingIntent sentIntent, PendingIntent deliveryIntent)方法(其余均为null)回发短信告知安全号码;若不为空则发送位置信息至安全号码。

      3).增加获取位置信息权限:ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION、ACCESS_MOCK_LOCATION。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。