学习到的内容:

1)对服务和广播的进一步理解

2)监听接收电话信息保存到SD卡上【多媒体的操作】

3)理解多进程守护、启动项广播开启服务【流氓软件】


通过界面单击事件,开启、关闭电话监听的服务:

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void start(View view){//开启服务<strong>Intent intent=new Intent(this,PhoneListenService.class);startService(intent);</strong>System.out.println("----start----------------");}public void stop(View view){//开启服务<strong>Intent intent=new Intent(this,PhoneListenService.class);stopService(intent);</strong>System.out.println("----stop----------------");}}


配置文件中注册的服务:

 <service android:name=".PhoneListenService"></service>
需要加的权限:

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />


对于服务的监听:其中包含了 得到电话管理器、挂断电话、电话接听、开始打电话的状态码的理解state、录音事件多媒体编程的九大模板编码步骤

public class PhoneListenService extends Service{//电话管理器private TelephonyManager tm;//监听器对象private MyListener listener;//定义一个多媒体private MediaRecorder mediaRecorder;@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}//服务创建的时候调用的方法@Overridepublic void onCreate() {<strong>//后台监听电话的呼叫状态//得到电话管理器tm=(TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);listener=new MyListener();tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);</strong>System.out.println("服务创建了");super.onCreate();}//服务销毁的时候调用的方法@Overridepublic void onDestroy() {super.onDestroy();//取消电话的监听<strong>tm.listen(listener, PhoneStateListener.LISTEN_NONE);listener=null;</strong>}private class MyListener extends PhoneStateListener{//当电话呼叫状态发生变化的时候调用的方法@Overridepublic void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);try {switch(state){<strong>case TelephonyManager.CALL_STATE_IDLE://空闲状态if(mediaRecorder!=null){//8.停止捕获mediaRecorder.stop();//9,释放资源mediaRecorder.release();mediaRecorder=null;System.out.println("录制完毕,上传到服务器");}break;case TelephonyManager.CALL_STATE_RINGING://响铃状态break;case  TelephonyManager.CALL_STATE_OFFHOOK://通话状态//开始录音//1.实例化一个录音机mediaRecorder=new MediaRecorder();//2.指定录音机的声音源mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//3.设置录制的文件的输出格式mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);//4.指定录音文件的名称File file=new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".3pg");mediaRecorder.setOutputFile(file.getAbsolutePath());//设置音频的编码mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);//6.准备开始录音mediaRecorder.prepare();//7.开始录音mediaRecorder.start();break;</strong>}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}  }}}




下面是流氓软件的两种方法:最终的目的是让服务不停止,这样就可以实现流氓程序永远运行

1)多进程相互守护,此进程关闭了服务,在onDestroy方法中启动另外一个服务【两个服务是不同名但功能是一样的服务】

2)实现开机自启动服务【利用广播】

对于进程守护:

public void onDestroy() {super.onDestroy();// 取消电话的监听System.out.println("ondestory");tm.listen(listener, PhoneStateListener.LISTEN_NONE);Intent i = new Intent(this,SystemService.class);startService(i);listener = null;

对于开机启动广播实现服务打开:

public class BootReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Intent i = new Intent(context,SystemService.class);context.startService(i);}}
















































更多相关文章

  1. android获取当前运行Activity名字的方法
  2. android画任意曲线时,去除移动过程中出现莫名直线的方法
  3. Android开发包下载(包括开发所需所有安装包的下载方法与地址)
  4. 【Android】沉浸式状态栏完美解决方案
  5. Android获取系统时间方法的总结
  6. Intent传递对象的两种方法(Serializable,Parcelable)
  7. Android之Service案例-电话

随机推荐

  1. Android音频可视化
  2. Android布局属性详解
  3. Android(安卓)圆形背景shape定义
  4. [Android]Using Text-to-Speech
  5. Android中通过NTP服务器获取时间功能源码
  6. [转]android layout布局属性
  7. Android安装
  8. Android设置无标题
  9. Android(安卓)之 对话框总结
  10. android 定时拍照并发送微博