Android Pass实现接口类的Activity的上下文从Service调用接口类方法

时间:2017-12-12 18:53:36

标签: java android

假设我有一个接口类:

public class A extends AppCompatActivity implements interfaceClass{

      @Override
      public void message() {
           // message: this is class A implementing interface
      }
}

public class B extends AppCompatActivity implements interfaceClass{

      @Override
      public void message() {
           // message: this is class B implementing interface
      }
}

接口由两个活动A和B实现:

public class serviceClass extends Service {

      interfaceClass object = (interfaceClass)context;
      object.message();

}

现在我有服务,我希望通过创建接口类的对象来调用活动A和B实现的接口类的方法,但我不知道如何初始化接口类对象为了从A或B类调用方法实现

{{1}}

有关如何获取活动A或B的上下文以初始化对象的任何建议???

2 个答案:

答案 0 :(得分:1)

我相信您可以使用绑定服务解决此问题:https://developer.android.com/guide/components/bound-services.html

然后你可以设置你的活动层次结构:

public abstract class ServiceActivity extends AppCompatActivity implements MyInterface {

    protected MyService service;

    ...

    @Override
    public void onServiceConnected(ComponentName name, IBinder binder) {
        MyBinder myBinder = (MyBinder) binder;
        service = myBinder.getService();
        ...
    }
}

public class A extends ServiceActivity {...}

public class B extends ServiceActivity {...}

现在,在您的服务中,您可能有这样的方法:

public void useInterface(MyInterface i) {
    i.doSomething();
}

您可以通过以下活动致电:

service.useInterface(this);

答案 1 :(得分:0)

对于你的问题:无法在服务中获取活动对象。

在使用中,您无法获得活动的Context。您只能获得ApplicationContext服务和BroadcastReceiver

如果您想通过服务与活动进行沟通,可以使用©

有关广播的更多信息:https://developer.android.com/guide/components/broadcasts.html