博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[android] 采用服务执行长期后台的操作
阅读量:6844 次
发布时间:2019-06-26

本文共 3012 字,大约阅读时间需要 10 分钟。

服务:在后台长期运行的没有界面的组件

 

新建一个类PhoneService类,继承系统的Service

清单文件中 进行配置

新建一个节点<service>,设置名称android:name=”.PhoneService”

 

类里面有几个重要方法

onCreate()方法,服务被创建的时候调用

onDestory()方法,服务被销毁的时候调用

 

开启服务

获取intent对象,new Intent(this,PhoneService.class),参数:上下文,字节码

调用上下文对象的startService(intent),参数:intent对象

 

在服务的onCreate()方法里,执行一些长期操作

获取TelephoneyManager对象,调用getSystemService(TELEPHONY_SERVICE)方法

调用TelephoneyManager对象的listen(istenerevents)方法,监听手机通话状态,参数:

PhoneStateListener对象,使用内部类类继承一下,要重写一些方法

PhoneStateListener.LISTEN_CALL_STATE

新建一个内部类MyPhoneStateListener继承PhoneStateListener

重写方法onCallStateChanged(state,incomingNumber),当手机的电话状态变化的时候,回调此函数

 

在上面方法里面,switch判断一下通话状态,有以下三种TelephonyManager.CALL_STATE_IDLE空闲状态,TelephonyManager.CALL_STATE_RINGING响铃状态,

TelephonyManager.CALL_STATE_OFFHOOK通话状态

 

需要权限android.permission.READ_PHONE_STATE

MainActivity.java

 

package com.tsh.listentel;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //开启服务        Intent intent=new Intent(this,PhoneService.class);        startService(intent);    }}

 

PhoneService.java

 

package com.tsh.listentel;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;public class PhoneService extends Service {    @Override    public IBinder onBind(Intent intent) {        // TODO Auto-generated method stub        return null;    }    //服务创建    @Override    public void onCreate() {        super.onCreate();        System.out.println("服务创建");        TelephonyManager tm=(TelephonyManager) getSystemService(TELEPHONY_SERVICE);        tm.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);    }    //内部类    private class MyPhoneStateListener extends PhoneStateListener{        @Override        public void onCallStateChanged(int state, String incomingNumber) {            super.onCallStateChanged(state, incomingNumber);            switch (state) {            case TelephonyManager.CALL_STATE_IDLE:                System.out.println("空闲状态");                break;            case TelephonyManager.CALL_STATE_RINGING:                System.out.println("响铃状态");                break;            case TelephonyManager.CALL_STATE_OFFHOOK:                System.out.println("通话状态");                break;            default:                break;            }        }            }    //服务销毁    @Override    public void onDestroy() {        System.out.println("服务销毁");        super.onDestroy();    }}

 

Manifest.xml 

转载于:https://www.cnblogs.com/taoshihan/p/5331232.html

你可能感兴趣的文章
Java get yesterday's date
查看>>
分享一些非常好用的Visual Studio扩展
查看>>
给大家分享一个培训的PPT:面向构件的组织级开发模式探讨
查看>>
提供了SDL非常多的基础功能、包括画线画圆各种函数包和缩放图形!
查看>>
在网页中显示数学符号
查看>>
实体类与xml互相转换通用 .
查看>>
IE中的隐私策略
查看>>
利用mapreduce将数据从hdfs导入到hbase遇到的问题
查看>>
Gnu Linux--Ubuntu系统清理项整理
查看>>
JDK 工具列表
查看>>
[Angular 2] Rendering an Observable with the Async Pipe
查看>>
Launch和Shut Off操作详解 - 每天5分钟玩转 OpenStack(30)
查看>>
HibernateTool的安装和使用(Eclipse中)
查看>>
开发原则之约定大于配置
查看>>
iOS - App 与外设间的通信方式
查看>>
docker学习2-安装实践
查看>>
在你的ASP.NET MVC中使用查找功能
查看>>
k8s实战读书笔记
查看>>
keytool
查看>>
《白日梦想家》影评笔记
查看>>