Android 4大应用程序组件 之服务 (Service)

本文介绍Android系统中服务和服务启动方式,通过示例展示了如何利用BroadcastReceiver接收广播启动服务和Activity,实现后台任务执行与用户交互。同时,以来电黑名单设置为例,演示了如何通过系统服务和AudioManager对象进行特定操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务(android.app.Service)是Android系统中一个重点,  服务主要用于两个目的: 后台运行和跨进程访问. 例如从Internet 下载文件、 音乐播放器

在Android系统中,利用BroadcastReceiver 接收广播可以 启动一个Activity,  同样可以启动Service

一个示例,在StartupReceiver  类的onReceive() 方法中完成了两项工作:启动服务和显示一个Activity 来提示服务启动成功. 其中MessageActivity 类在配置时使用了"@android:style/Theme.Dialog" 主题. 因此,如果服务启动成功,将显示图片

关键代码如下:

  public class StartupReceiver extends BroadcastReceiver {
         @Override
         public void onReceive(Context context, Intent intent)  {
              Intent serviceIntent = new Intent(context, MyService.class);  
             context.startService(serviceIntent);                                  //同上下文启动服务
  
              Intent activityIntent = new Intent(context, MessageActivity.class);
              activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              context.startActivity(activityIntent);
        }

}

示意图如下

AndroidManifest.xml配置,包括对Activtiy,BroadcastReceiver,Service,uses-permission 4种类型的配置

 ch08_startupservice工程.


再看一个示例,来电黑名单设置:  通过系统服务获得电话服务Telephony 对象,监听手机的来电状态,将用户设定号码来电高成静音,这样还需要一个音频服务AudioManager 对象

主要代码如下:

public class Main extends Activity  {
 public class MyPhoneCallListener extends PhoneStateListener  {

  @Override
  public void onCallStateChanged(int state, String incomingNumber)   {
     AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
;
   switch (state)   {
    case TelephonyManager.CALL_STATE_IDLE:
     audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
     break;
    case TelephonyManager.CALL_STATE_RINGING:
     if ("5556".equals(incomingNumber))     {
      audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
     }
     break;
   }
   super.onCallStateChanged(state, incomingNumber);
  }
 }

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
  MyPhoneCallListener myPhoneCallListener = new MyPhoneCallListener();
  tm.listen(myPhoneCallListener, PhoneStateListener.LISTEN_CALL_STATE);
 }
}

 具体代码 请参见 ch08_phoneblacklist工程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值