如何从android中的非Activity类调用服务方法

Posted

技术标签:

【中文标题】如何从android中的非Activity类调用服务方法【英文标题】:how to call a service method from a non-Activity class in android 【发布时间】:2013-08-23 19:24:48 【问题描述】:

我看到了这个关于如何绑定服务并从 Activity 调用其方法的示例。

http://developer.android.com/reference/android/app/Service.html#LocalServiceSample

但我想绑定一个服务并从非 Activity 类调用它的方法。

我该怎么做?

因为我没有实现以下方法:

bindService, unbindService

【问题讨论】:

你只需要一个上下文来绑定一个服务。上下文可以是活动、服务或应用程序。 我没有实现以下方法:bindService、unbindService bindService 是 Context 的一个方法。你需要一个上下文来使用 bindService 我明白了。推荐的解决方法是什么?创建一个虚拟上下文成员?获取应用程序的上下文? 你的类需要扩展android.content.ContextWrapper类,其中实现了bindServiceunbindServicestartService方法,然后可以从你的扩展类中使用它们。 【参考方案1】:

通过与Activity 相同的方式,只需获取/传递content Activity 的实例

假设你有 MyActivity 类 和OtherClass

所以你在OtherClass运行

 public class OtherClass 

    Context mContext;

    public void init(Context context)
      mContext = context;
    
    ...

mContext.startService(new Intent(mContext, SomeService.class)); 

[编辑]

在你的情况下:

Intent intent = new Intent(mContext, LocalService.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

参见文档here

【讨论】:

我没有实现以下方法:bindService、unbindService 我不喜欢使用这些方法,但它们的概念相同 但我是从android开发官方网站上拿的。那怎么办 但我不想启动该服务。我想绑定一个正在运行的。 再次:bindService 你提到的如果我的类不继承自 Context 可以解决吗?我真的需要操纵 mContext 成员吗?

以上是关于如何从android中的非Activity类调用服务方法的主要内容,如果未能解决你的问题,请参考以下文章

Android 如何从 Main Activity 中的另一个类调用 Activity 数据类型?

android 应用调用另外一个应用的activity

如何从另一个类(它扩展了 Activity)方法,Android 调用 CCColorLayer 类的方法?

如何从 Activity 调用一个类

Android 中如何在java类中调用activity 中的一个方法?

如何从android中的自定义适配器调用Activity asynctask