如何在非Activity中启动、绑定Service(服务)

做Android开发的都知道,启动或绑定服务的语句是startService、bindService,可是这两个方法一般都只能在Activity中使用,也就是用Activity才能“.”的出这方法

做Android开发的都知道,启动或绑定服务的语句是startService、bindService,可是这两个方法一般都只能在Activity中使用,也就是用Activity才能“.”的出这方法。那如何在非Activity中开始、绑定服务呢?

以Fragment为例:

一个MyFragment类是继承Fragment,他不是Activity类型。但是,一个非Activity的类总是和Activity类有关联的,需要在Activity中调用非Activity中的参数、方法之类,这就给了我们在非Activity类中调用startService、bindService的机会。即将Activity类名这个参数传到非Activity中,然后调用方法启动服务。

如在Activity中调用MyFragment的时候:

FragmentManager fragmentMgr = getSupportFragmentManager();

FragmentTransaction ft = fragmentMgr.beginTransaction();

MyFragment fragment = new MyFragment(this); 在这一句里加一个参数

ft.add(R.id.main_tab1_bofang, fragment );

ft.commit();

然后,我们在MyFragment中创建一个以Activity为参数类型的构造方法:

public MyFragment(Activity Activity) {

Log.e("onCreateView", "准备绑定服务");

Intent service=new Intent(Activity.getApplicationContext(),MusicService.class);

Activity.getApplicationContext().bindService(service, conn, Context.BIND_AUTO_CREATE);

}

注意事项:在一些类中,我们不能直接使用bindService这个方法,得通过Activity.getApplicationContext()来使用,如在TabActivity类中。

本文出自 “Android” 博客,请务必保留此出处

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Activity 获取 service 对象,可以通过以下方式: 1. 使用 startService() 或 bindService() 方法启动绑定服务,并在回调方法获取 service 对象。 例如,使用 bindService() 绑定服务并获取 service 对象的代码如下: ```java Intent intent = new Intent(this, MyService.class); bindService(intent, connection, Context.BIND_AUTO_CREATE); ``` 其,MyService 是你定义的 Service 类,connection 是一个 ServiceConnection 对象,用于在服务绑定成功后获取 service 对象。ServiceConnection 的实现代码如下: ```java private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { MyService.MyBinder binder = (MyService.MyBinder) service; MyService myService = binder.getService(); // 获取 service 对象,并进行操作 } @Override public void onServiceDisconnected(ComponentName name) { // 断开服务连接时的操作 } }; ``` 2. 使用 getSystemService() 方法获取系统服务,并强制转换为对应的 Service 类型。 例如,获取系统的 NotificationManager 服务对象的代码如下: ```java NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); ``` 其,Context.NOTIFICATION_SERVICE 是 NotificationManager 服务的标识符,通过 getSystemService() 方法获取对应的服务对象。需要注意的是,获取系统服务对象时,需要将其强制转换为对应的 Service 类型,否则会报错。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值