Android Service 服务
来源:互联网 发布:淘宝化妆品类目 编辑:程序博客网 时间:2024/05/21 09:39
Service 服务
清单文件中_注册:
<application 层中 <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.RECEIVE_BOOT_COMPLETED"/><service android:name="MyService"></service>
第一次写的服务:MyService.java
package com.bz.service;import java.text.SimpleDateFormat;import android.app.Service;import android.content.Intent;import android.media.MediaRecorder;import android.os.Binder;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import android.widget.Toast;public class MyService extends Service { @Override public void onCreate(){ //创建服务 super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId){ //开启服务 //电话窃听器 TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);//获取TelephonyManager实例 tm.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);//注册电话的窃听 return super.onStartCommand(intent, flags, startId); //return::START_STICKY:重启服务Intent为NULL/START_NOT_STICKY:无法自动重新启动/START_REDELIVER_INTENT:重启服务并传入Intent/START_STICKY_COMPATIBILITY:不能完全做到能自动重启服务 } @Override public void onDestroy(){ //关闭服务 super.onDestroy(); } private MediaRecorder recorder = null; //录音机实例 //定义一个类用来监听电话的状态 private class MyPhoneStateListener extends PhoneStateListener{ //当电话状态发生改变时 @Override 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: //接听状态 recorder.start(); //开始录 break; case TelephonyManager.CALL_STATE_RINGING: //响铃状态 //准备录音机 recorder = new MediaRecorder(); //创建一个录音器实例 recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); //设置音频来源 (MIC单方 VOICE_CALL双方) recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //设置输出格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //设置音频编码方式 如ACC String str = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new java.util.Date());//获取当前时间 recorder.setOutputFile("/mnt/sdcard2/recording_"+str+".3gp"); //设置存放路径!!! try { recorder.prepare(); //准备录 } catch (Exception e) { e.printStackTrace(); } break; default: break; } super.onCallStateChanged(state, incomingNumber); } } @Override public IBinder onBind(Intent intent){ //绑定服务 //return null; return new MyBinder(); //返回中间人 } public void Tosat(){ //服务中的方法 Toast.makeText(getApplicationContext(), "界面调用服务的方法", 0).show(); } //调用服务的方法的中间人 public 通过接口 private private class MyBinder extends Binder implements IMyBinder{ public void goTosat(){Tosat();} }}
服务中间人(接口对象):IMyBinder.java
package com.bz.service;public interface IMyBinder { public void goTosat();}
开启服务
Intent intent = new Intent(this, MyService.class);startService(intent);//第二种开启服务的方法 绑定服务(不能在设置界面找到==隐藏的服务, 但会随界面的关闭而关闭(解绑的时候会销毁服务), 可以在Activity中调用Service的方法, 使用借口可以使一些方法暴露一些方法隐藏)//myConn = new MyConn();//bindService(intent, new MyConn(), BIND_AUTO_CREATE);//myBinder.goTosat(); //通过中间人调用服务里的方法
中间人
//MyBinder myBinder; //中间人IMyBinder myBinder; //接口的中间人//定义一个类 用来监视服务的状态private class MyConn implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name, IBinder service) { System.out.println("服务绑定成功"); //通过中间人调用服务的方法 //myBinder = (MyBinder) service; myBinder = (IMyBinder) service; } @Override public void onServiceDisconnected(ComponentName name) { System.out.println("服务解绑定成功"); }}
停止服务
Intent intent = new Intent(this, MyService.class);stopService(intent);//unbindService(myConn);//解绑服务
..
/* * 调用别的App的服务的方法: (如支付宝的支付) * * 拥有服务的App: * 1.重命名暴露方法的借口 (本App中的IMyBinder.java), 重命名为.aidl (如IMyBinder.aidl), 去除所以public (因为aidl所有本来就是公有的,不需要加) * 2.服务中的子类 (MyBinder implements IMyBinder) 改为接口Stub (系统自动生成的,MyBinder implements Stub) * * 要调用服务的App: * 1.创建一个名称‘有服务的包’一模一样的包(com.bz.service),把上面的.aidl文件复制到包里 * 2.绑定服务的方法为:Intent i = new Intent(); /n intent.setAction("上面App清单文件中服务的名称'com.bz.service.MyBootReceiver'"); bindService(i,new MyConn(), BIND_AUTO_CREATE); * 3.也要在清单文件注册这个服务哦 (com.bz.service.MyBootReceiver) * 4.获取中间人的方法改为:中间人对象 = Stub.asInterface(service); * */
0 0
- 【Android】Android Service 服务
- Android (服务Service)
- android Service--服务
- Android service 服务 笔记
- Android:服务--Service
- Android Service---启动服务
- Android Service---终止服务
- Android Service---启动服务
- Android Service---终止服务
- android Service--服务 .
- Android Service服务
- android 理解service服务
- android远程服务service
- Android服务之Service
- Android Service 服务
- Android服务之Service
- Android Service服务
- Android 服务Service
- windows--读后感
- 阿里巴巴返回json
- Jetty总体设计框架图
- Java - 泛型 ( Generic )
- 【结绳记事】2017年度计划
- Android Service 服务
- 网页在线视频播放大全
- Codeforces 766C. Mahmoud and a Message 水题详解+错点记录
- 解决:displaytag分页get提交出现中文乱码
- BI选型之国内外BI产品对比分析
- 解决“Unable to chmod sdcard: Read-only file system”
- PDF文档结构说明
- Spark-1.3.1与Hive整合实现查询分析
- Jetty中Web程序的创建与启动