Android之(利用服务实现)

1.启动模拟器,部署应用

2.利用模拟器控制器发送短信启动服务(查看日志输出判断是否成功)

3.向模拟器拨打电话,并接听,挂断电话后,利用文件管理查看对应的cache目录或者sdcard中生成了3gp文件,并将其复制到pc中播放以验证。

清单设置(一个receiver,一个service,若干权限)

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name= "android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECEIVE_SMS"/> … <application …> <receiver android:name="BootBroadcastReceiver"> <intent-filter> <action android:name= "android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> <service android:name="PhoneListenerService" />


器服务类:PhoneListenerService

package cn.class3g.phonelistener; ... public class PhoneListenerService extends Service { public IBinder onBind(Intent arg0) { return null; } public void onCreate() { super.onCreate(); Log.i("TAG", "服务启动了"); // 对电话的来电状态进行监听 TelephonyManager telManager = (TelephonyManager) this .getSystemService(Context.TELEPHONY_SERVICE); // 注册一个监听器对电话状态进行监听 telManager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); } private class MyPhoneStateListener extends PhoneStateListener { MediaRecorder recorder; File audioFile; String phoneNumber; public void onCallStateChanged(int state, String incomingNumber) { switch (state) { case TelephonyManager.CALL_STATE_IDLE: /* 无任何状态时 */ if (recorder != null) { recorder.stop();// 停止刻录 recorder.reset();// 重设 recorder.release();// 刻录完成一定要释放资源 } break; case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起电话时 */ try { recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置音频采集原 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 内容输出格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 音频编码方式 // recorder.setOutputFile("/sdcard/myvoice.amr"); audioFile = new File( Environment.getExternalStorageDirectory(), phoneNumber + "_" + System.currentTimeMillis() + ".3gp"); recorder.setOutputFile(audioFile.getAbsolutePath()); Log.i("TAG", audioFile.getAbsolutePath()); recorder.prepare(); // 预期准备 recorder.start(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } break; case TelephonyManager.CALL_STATE_RINGING: /* 电话进来时 */ phoneNumber = incomingNumber; break; default: break; } super.onCallStateChanged(state, incomingNumber); } } }


利用开机启动广播启动服务(实验环境中为了方便起见可以先改用短消息广播)

开机启动完成广播action

<actionandroid:name="android.intent.action.BOOT_COMPLETED"/>

package cn.class3g.phonelistener; ... public class BootBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Log.i("TAG", "广播被接收了"); Intent serviceIntent = new Intent(context, PhoneListenerService.class); context.startService(serviceIntent); } }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值