Android startService开启服务
来源:互联网 发布:seo h1标签用法 编辑:程序博客网 时间:2024/05/22 08:15
耗时的,运行在后台的,可以看作是没有界面的activity。设置服务可以提高程序的优先级(第三级),使程序在用户手机运行更久。
第一次开启服务:onCreate() onstartCommand()
随后开启服务:onstartCommand()
开启服务需要先创建服务onCreate(),若是已经创建了服务,则调用onstartCommand()开启服务。
停止服务onDestory() , 然后再次开启服务需要重新创建。直接退出当前应用,后台服务不会关闭,只有当onDestory()方法调用后,服务才会关闭,更具体一点说,是手动调用stopService 或 在应用管理器中关闭 service 服务才会关闭。
开启服务 Intent service=new Intent(this,MyService.class); startService(service);
停止服务 Intent intent=new Intent(this,MyService.class); stopService(intent);
电话录音机:
接电话只能由服务接收到,广播接收者只能接收往外打电话的广播。
而且打电话是一件比较耗时的操作,只能用服务来完成录音,广播一般只用来处理耗时少的简单逻辑。
首先创建一个Service
public class RecordService extends Service {@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {super.onCreate();//创建一个电话管理器对象,通过这个对象,可以监听电话状态。TelephonyManager manager=(TelephonyManager) getSystemService(Service.TELEPHONY_SERVICE);//调用电话管理器的listen方法,注册监听manager.listen(new PhoneStateListener(){private MediaRecorder recorder;@Overridepublic void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);switch(state){case TelephonyManager.CALL_STATE_IDLE:System.out.println("空闲状态,录音结束"); if(recorder!=null){ recorder.stop(); recorder.reset(); // You can reuse the object by going back to setAudioSource() step recorder.release(); // Now the object cannot be reused } break;case TelephonyManager.CALL_STATE_RINGING:System.out.println("响铃"+incomingNumber);recorder = new MediaRecorder();//MIC只能录自己的音 VOICE_CALL可以录双方的音,但外国不允许录别人的音。 recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置音频输出的格式3gp效果不太好,体积小 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //设置音频编码,amr早期使用的音频格式AMR_NB效果不太好,体积小 好一点是WB recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //输出文件的保存路径 recorder.setOutputFile(getCacheDir()+"/"+incomingNumber+".3gp"); try {recorder.prepare();} catch (Exception e) {e.printStackTrace();}break;case TelephonyManager.CALL_STATE_OFFHOOK:System.out.println("接电话了"+incomingNumber); recorder.start(); // Recording is now startedbreak;}}}, PhoneStateListener.LISTEN_CALL_STATE);}}在清单文件中配置service
<service android:name="com.haowan.RecordService"></service>赋予权限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.RECORD_AUDIO"/>最后在MainActivity中添加两个监听事件,startService后便会调用onCreate()方法
public void start(View v){Toast.makeText(getApplicationContext(), "点击start按钮", Toast.LENGTH_SHORT).show();Intent service=new Intent(getApplication(),RecordService.class);startService(service);}public void stop(View v){Intent name=new Intent(getApplication(),RecordService.class);stopService(name);}注意,若来了电话直接挂掉,则会报错。这是因为MediaRecorder没有执行start ,就直接执行了 stop ,没有按照一定的顺序,这里只是稍作修改,将stop用try catch包起来。
这个功能可以作为开机自启动:
用一个广播接收器来收听开机的广播,然后开启电话录音机服务。
先建一个BroadcastReceiver,context调用startService,开启服务
public class BootReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {context.startService(new Intent(context,com.haowan.RecordService.class));}}然后配置清单文件
<receiver android:name="com.haowan.BootReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
0 0
- Android startService开启服务
- Service:通过startService方式开启服务
- Android服务启动之StartService源码分析
- Android Service 服务 —— startService()
- Android服务之startService源码分析
- Android StartService(服务) 简单使用
- Android Service 之启动服务( startService() )
- Android开启Telnet服务
- Android开启Ftp服务
- Android 开启服务Service
- Android Service 服务(一)—— startService方式
- android应用层服务——binderService与StartService
- Android-服务Service(1)-介绍及startService调用
- android应用层服务——binderService,StartService,aidl,本地服务和远程服务
- android 开启关闭wifi服务
- Android 判断服务是否开启
- Android混合方式开启服务
- android系统服务 adbd服务的开启
- 【洛谷P3131】 【USACO16JAN】子共七
- ISP图像质量调节介绍
- HDU3790:最短路径问题(最短路+双权值)
- opencv程序在linux下的执行(未成功)
- 排序--归并排序
- Android startService开启服务
- samba服务器搭建共享文件夹
- 第一个Flask程序
- 关于使用StringBuffer内存溢出问题
- spring-boot搭建简单web(一)
- hibernate配置详情1(hibernate.cfg.xml)
- javaweb项目的分包笔记
- 根据二叉树的中序和后序遍历,求前序遍历
- 蓝桥杯-排序-冒泡排序