我有一个需要启动活动的WallpaperEngine - 一个简单的选项菜单。
我需要该菜单选择的结果。从活动回到服务的最佳方式是什么,因为它没有引用服务,我不能做startActivityForResult。
谢谢!
答案 0 :(得分:2)
您可以使用Binders
和ServiceConnection
将Serivce
与Activity
相关联。
在Activity
:
private YourService mService;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder service) {
mService = ((YourBinder)service).getService();
}
public void onServiceDisconnected(ComponentName name) {
mService = null;
}
};
@Override
protected void onResume() {
bindService(new Intent(this, YourService.class), mConnection, Context.BIND_AUTO_CREATE);
super.onResume();
}
@Override
protected void onPause() {
if(mConnection != null){
unbindService(mConnection);
}
super.onPause();
}
您的Binder
:
public class YourBinder extends Binder {
private WeakReference<YourService> mService;
public YourBinder(YourService service){
mService = new WeakReference<YourService>(service)
}
public YourService getService(){
return mService.get();
}
}
在Service
:
@Override
public IBinder onBind(Intent intent) {
return new YourBinder(this);
}
在此之后,您可以从Service
调用Activity
的公开方法。请注意,绑定是异步的。当您可以与Activity
的用户界面进行互动时,已建立连接,但在onCreate()
和onResume()
方法中,您的Service
对象可能仍为空
答案 1 :(得分:0)
在这里查看教程: http://www.ozdroid.com/#!BLOG/2010/12/19/How_to_make_a_local_Service_and_bind_to_it_in_Android
您将要做的是将您的活动绑定到服务,这将为活动提供参考,并能够对服务进行任何操作。 (本教程介绍如何从活动中启动服务,但当然不需要这样做)