当前位置:操作系统 > 安卓/Android >>

Android四大组件之服务

 

很多情况下,一些与用户很少需要产生交互的应用程序,我们一般让它们在后台运行就行了,而且在它们运行期间我们仍然能运行其他的应用。

为了处理这种后台进程,Android引入了Service的概念。Service在Android中是一种长生命周期的组件,它不实现任何用户界面。

基本概念

Ÿ   Service是一种在后台运行,没有界面的组件,由其他组件调用开始。

 

Ÿ   创建Service,定义类继承Service,AndroidManifest.xml中定义<service>

 

Ÿ   开启Service,在其他组件中调用startService方法

 

Ÿ   停止Service,调用stopService方法

 

1.在activity中调用service

 

 

/* 

 * 开启服务 

 */ 

public void start(View view) { 

    Intent intent = new Intent(this, MyService.class); 

    startService(intent); 

/* 

 * 结束服务 

 */ 

public void stop(View view) { 

    Intent intent = new Intent(this, MyService.class); 

    stopService(intent); 

2.定义Service:

 

 

public class MyService extends Service { 

 

    /*

     * 绑定时调用

     */ 

    public IBinder onBind(Intent intent) { 

        return null; 

    } 

 

    /*

     * 开启服务时调用

     */ 

    public void onCreate() { 

        super.onCreate(); 

        System.out.println("onCreate"); 

    } 

 

    /*

     * 结束服务时调用

     */ 

    public void onDestroy() { 

        super.onDestroy(); 

        System.out.println("onDestroy"); 

    } 

 

3.在清单文件中进行定义服务:<service android:name=".PMyService" />

 

电话录音

 

电话录音是使用服务来实现的,在后台运行,使用易做图来监听电话的状态,当来电话时,易做图获取到来电话的电话号码,当用户接听后,就开始录音,当监听到电话的状态挂断后,停止录音,并将录音保存到sdcard中。

 

java代码:

 

 

@Override 

public void onCreate() { 

    //拿到电话服务 

    TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 

     

    //电话的状态易做图 

    manager.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE); 

 

private final class MyListener extends PhoneStateListener { 

    private String num; 

    private MediaRecorder recorder;   //录音 

    private File file; 

    public void onCallStateChanged(int state, String incomingNumber) { 

        switch (state) { 

            //响铃状态 

            case TelephonyManager.CALL_STATE_RINGING: 

                //保存电话号 

                num = incomingNumber; 

                break; 

            //接通电话状态 

            case TelephonyManager.CALL_STATE_OFFHOOK: 

                try { 

                    //设置文件保存位置 

                    file = new File(Environment.getExternalStorageDirectory(), num + "_" + System.currentTimeMillis() + ".3gp"); 

                     

                    //创建录音器 

                    recorder = new MediaRecorder(); 

                     

                    //设置音频的来源(麦克风) 

                    recorder.setAudioSource(AudioSource.MIC); 

                     

                    //采取3gp格式保存 

                    recorder.setOutputFormat(OutputFormat.THREE_GPP); 

                     

                    //设置编码器 

                    recorder.setAudioEncoder(AudioEncoder.AMR_NB); 

                     

                    //输出文件路径 

                    recorder.setOutputFile(file.getAbsolutePath()); 

                     

                    //准备 

                    recorder.prepare(); 

       &nb

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,