标签:
Service在继承关系上是Activity的大爷,也就是说Activity多继承了一个类,封装了界面相关,等等其他操作。
服务没有onPause、onStop、onResume、onRestart方法,因为service没有界面,长期运行在后台。一个服务只能被停止一次;
onDestroy:销毁服务
public class MyBinder extends Binder{
} 2、在服务类里面创建了一个MyBinder的成员变量: public class MyBinder extends Binder{
//使用中间人调用服务里的方法
public void callMethodInService(){
methodInService();
}
} 4、在activity中bindService时,定义了ServiceConnection,用它来监听绑定完成时的函数回调,在这个连接中实现了两个函数: private class MyConn implements ServiceConnection {
/**
* 服务连接成功时调用这个方法
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//得到服务绑定成功后返回的中间人MyBinder对象
myBinder = (MyBinder) service;
}
/**
* 服务断开成功时调用这个方法
*/
@Override
public void onServiceDisconnected(ComponentName name) {
System.out.println("-------onServiceDisconnected-------");
}
} 5、通过在activity中通过中间人条用服务的业务逻辑方法: public interface IService {
public void callMethodInService();
} 2、让服务中的中间人实现了服务的接口类: private class MyBinder extends Binder implements IService{
//(实现服务接口中的方法)使用中间人调用服务里的方法
public void callMethodInService(){
methodInService();
}
} 3、在activity中声明接口的成员变量: private class MyConn implements ServiceConnection {
/**
* 服务连接成功时调用这个方法
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//强制转换成服务的接口类型
myBinder = (IService) service;
}public void call(View view){
myBinder.callMethodInService();
} public class DHQTService extends Service {
/**
* 当服务被创建的时候调用这个方法
*/
@Override
public void onCreate() {
System.out.println("=========onCreate=========");
super.onCreate();
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE);
}
}<service android:name="com.itheima.dhqtq.DHQTService"></service>
service = new Intent(this,DHQTService.class); //开启服务 startService(service);
/**
* 当服务被创建的时候调用这个方法
*/
@Override
public void onCreate() {
System.out.println("=========onCreate=========");
super.onCreate();
<span style="white-space:pre"> </span>//通过获取系统服务得到TelephonyManager,用它来监听电话状态
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
<span style="white-space:pre"> </span>//使用TelephonyManager监听电话状态,并设置监听器
tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE);
}
/**
*自定义一个电话状态监听器,监听电话
*/
private class mylistener extends phonestatelistener {
<span style="white-space:pre"> </span>//使用MediaRecorder类录音
private MediaRecorder r;
<span style="white-space:pre"> </span>//电话状态改变会调用此函数
@Override
public void onCallStateChanged(int state, String incomingNumber) {
try {
// super.onCallStateChanged(state, incomingNumber);
System.out.println("====state===============" + state);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:// 闲置状态
System.out.println("关闭录音机,上传音频文件..................");
if(r != null){
r.stop();//录制完成
r.release();//释放资源
r = null;
//上传文件
}
break;
case TelephonyManager.CALL_STATE_RINGING:// 来电话状态
System.out.println("准备好录音机,准备录音..................");
<span style="white-space:pre"> </span>//创建一个MediaRecorder对象
r = new MediaRecorder();
<span style="white-space:pre"> </span>//设置捕获设备为麦克
r.setAudioSource(MediaRecorder.AudioSource.MIC);
r.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置输出格式为3gp
//设置输出目录
//r.setOutputFile("/mnt/sdcard/info.3gp");
r.setOutputFile(Environment.getExternalStorageDirectory()+"/info.3gp");
r.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置音频编码格式
r.prepare(); //准备录制
break;
case TelephonyManager.CALL_STATE_OFFHOOK:// 接听状态
System.out.println("开始录音..................");
r.start();//开始录制
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
// 1、得到广播接收者的对象
ScreenBroadCastReceiver screenReceiver = new ScreenBroadCastReceiver();
// 2、创建一个intentFilter对象
IntentFilter filter = new IntentFilter();
// 3、注册接收的事件类型
filter.addAction("android.intent.action.SCREEN_ON");
filter.addAction("android.intent.action.SCREEN_OFF");
// 4、注册广播接收者
this.registerReceiver(screenReceiver, filter);
标签:
原文地址:http://blog.csdn.net/rankun1/article/details/51347727