Android移动开发之【Android实战项目】后台服务Service

桌面应用程序:可见

服务:不可见 长期在后台运行 帮助应用执行耗时的操作

安卓的服务:安卓四大组件之一 不可见 后台长期运行 界面与服务有时候要执行数据交互

如何创建服务

创建一个类 继承Service.

package com.li.servce;
 
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
 
public class MyService extends Service{
	//Service启动时调用
	@Override
	public void onCreate() {
		super.onCreate();
		Log.v("wang", "OnCreate 服务启动时调用");
		
	}
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
	//服务被关闭时调用
	@Override
	public void onDestroy() {
		super.onDestroy();
		Log.v("wang", "onDestroy 服务关闭时");
	}
 
}

四大组件多需要配置配置

 <service android:name="com.li.servce.MyService"></service> <!--绑定一个服务类-->

调用服务器

package com.li.servce;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
 
public class MainActivity extends Activity {
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	public void createServiceClick(View v){
		Intent intent = new Intent(this,MyService.class);
		//启动servicce服务
		startService(intent);
	}
	//虽然应用界面已经退出  但是服务还是存在的
	//停止服务  可以通过按钮来关闭   可以通过代码关闭服务
	public void clickStopService(View v){
		Intent name= new Intent(this,MyService.class);
		stopService(name);//name表示停止哪一个服务
	}
	
}

电话窃听器原理

开发步骤:

  1. 创建一个后台运行的服务

  2. 启动应用的时候启动服务

  3. 在onCreate()调用的时候 创建一个系统的服务 并获取电话的状态

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

//1. 注册监听器 2. 监听的事件

代码

package com.li.callMyVoce;
 
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
 
public class CallService extends Service{
	@Override
	public void onCreate() {
		super.onCreate();
		//开始时刻接听用户电话状态   休闲(没有接听电话)   邻响    接通    挂断
		//如果自己去写代码接通用户状态  会很复杂 的操作  求系统
		//系统服务getSystemService(name)   电话有关的服务      服务的后缀一般以service manager ...作为后缀
		//TelephonyManager  他表示可以接听各种各样跟手机有关的很多服务  他表是一个大的概念
		TelephonyManager manager=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);
										 												//manager.listen(listener, events)
		manager.listen(new PhoneStateListener(){										//listener表是接听手机的那个状态比如说接听电话的服务new PhoneStateListenter()//重写方法等等
			@Override
			public void onCallStateChanged(int state, String incomingNumber) {//incomingNumber表示电话号码   只有来点时才有值
				switch (state) {
				case TelephonyManager.CALL_STATE_IDLE:
					Log.v("wang", "CALL_STATE_IDLE   休闲状态     挂断");
					break;
				case TelephonyManager.CALL_STATE_OFFHOOK:
					Log.v("wang", "CALL_STATE_OFFHOOK  接通");
					break;
				case TelephonyManager.CALL_STATE_RINGING:
					Log.v("wang", "CALL_STATE_RINGING    电话铃声响状态"+incomingNumber);
					break;
				}
			}
		}, PhoneStateListener.LISTEN_CALL_STATE);									
																						// events  就是要指定对那些事件比较关心
	}
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
 
}

调用

package com.li.callMyVoce;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
 
public class MainActivity extends Activity {
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	//1.时时刻刻的接听用户当前的打电话状态  ----> Service
	//2.当用户开启接听电话的时候  开始录音   用户挂断了电话停止录音--->录音功能
	//3.当发现网络状态(广播  判断是否有网络)是开着的时候就应该发送录音到后台服务器
	}
	public void clickService(View v){
		Intent intent = new Intent(this,CallService.class);
		startService(intent);
	}
}

配置文件里面的铭感操作

     <!-- 绑定服务器 -->
        <service android:name="com.li.callMyVoce.CallService"></service>
 <!-- 电话的铭感操作 -->
	<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

服务和子线程的区别

总结:

  • 服务是长期在后台运行的

  • 开启一个用真的死循环的子线程也是在后台长期运行

*如果一个应用程序有后台的服务在运行,即使你杀掉进程,进程和服务还会自动的复活

  • 如果一个应用程序只有后台的子线程运行 杀掉进程进程和子线程都挂了

  • 如果你要保证一个后台的操作长期运行1.开启服务 2.在服务里面创建线程
    在这里插入图片描述
    在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

理想不闪火

你的鼓励将是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值