博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android实例-手机安全卫士(三十)-根据指令完成相应操作一(报警音乐和GPS追踪)...
阅读量:5363 次
发布时间:2019-06-15

本文共 4019 字,大约阅读时间需要 13 分钟。

一、目标

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

                    

二、代码实现

  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 
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。

 

转载于:https://www.cnblogs.com/Red-Shark/p/4415259.html

你可能感兴趣的文章
建立开发板文件,测试编译环境
查看>>
【Python web 开发】json web token 方式生成token
查看>>
TFS 删除工作区签出状态
查看>>
Maven实战04_使用Archetype生成项目骨架
查看>>
逆向知识之CS1.6辅助/外挂专题.1.实现CS1.6主武器副武器无限子弹
查看>>
Java开发知识之Java控制语句
查看>>
Python学习笔记6 函数式编程_20170619
查看>>
4.7下午
查看>>
如何打包静态库.a文件 iOS
查看>>
CWnd::OnContextMenu函数(右键单击弹出快捷菜单)
查看>>
一天的好心情
查看>>
sublime Text 3 官方版 3114 注册码 官网最新版本
查看>>
一个空格引发的血案啊!
查看>>
iOS protocol传值
查看>>
谷歌插件Image downloader开发之popup
查看>>
JPA与Hibernate(转)
查看>>
extjs combobox loadrecord 回显 二次封装
查看>>
自动引用计数(ARC)
查看>>
openvswith Frequently Asked Questions
查看>>
UIBezierPath精讲
查看>>