我有一个服务(用于通信)需要调用当前运行活动的openOptionsMenu()。我有大约3个左右的活动需要根据服务请求显示他们的选项菜单。我怎样才能找到这个当前的运行活动?如何从服务中打开Activity.openOptionsMenu()
0
A
回答
0
我建议从活动Activity中调用bindService()并打开到服务的连接。在您的服务绑定器连接上定义的一种方法应该将Binder作为参数。该活动将实例化此Binder并将其传递到Service的活页夹方法中。当有趣的事件发生时,服务应该调用活动传递给Binder的方法。
当您的某项活动进入后台时,应取消注册之前传入的活页夹并从服务中解除绑定。
所以,你已经拥有了该服务的AIDL,看起来像
interface IServiceConnection {
void registerCallback(IActivityCallback callback);
void unregisterCallback(IActivityCallback callback);
}
然后你有一个IActivityCallback.aidl,看起来像
oneway interface IActivityCallback {
void openOptionsMenu();
}
在你的服务,你必须
private ArrayList<IActivityCallback> mCallbacks = new ArrayList<IActivityCallback>();
private IServiceConnection.Stub mBinder = new IServiceConnection.Stub() {
public void registerCallback(IActivityCallback callback) {
mCallbacks.add(callback);
}
public void registerCallback(IActivityCallback callback) {
mCallbacks.remove(callback);
}
}
private void onEvent() {
for (int ptr = mCallbacks.size() - 1; ptr > -1; ptr--) {
mCallbacks.get(ptr).openOptionsMenu();
}
}
在您的Service的onBind方法中,您返回mBinder。
在你的活动,你有
private IActivityCallback.Stub mPlayerBinder = new IActivityCallback.Stub() {
public void openOptionsMenu() {
// call method in Activity to show options menu
}
}
您绑定到你的服务从一个bindService通话业务,且当ServiceConnection接收onServiceConnected你投的存根IServiceConnection,然后调用registerCallback方法。
0
我不建议该行动计划。没有用户许可和预知的操作和UI功能是不友善的。但要做到这一点,您需要通过应用程序扩展中的静态字段或字段(或单身状态机等)来维护您的活动。
相关问题
- 1. 如何从windows服务打开cmd?
- 2. 打开从WCF服务
- 3. 如何打开ejabberd服务器公开
- 4. 从服务中打开网页链接
- 5. 从服务中打开表格
- 6. 从服务中打开浏览器
- 7. 如何打开从服务器的PDF文件中的android
- 8. 在JavaScript中,你如何从服务器打开文件?
- 9. 如何始终打开服务器?
- 10. 如何正确打开WCF服务
- 11. Windows服务打开
- 12. 如何从Web服务器开始开发短信服务?
- 13. Silverlight从服务器打开文件
- 14. 从Windows服务打开对话窗口
- 15. 从Linux服务器打开IDLE
- 16. 如何从nodejs服务器发送查询以打开数据服务器?
- 17. 如何从服务中调用服务的方法,然后重新打开服务
- 18. RapidXML - 如何从服务器位置打开XML文件?
- 19. 如何从emacs终端上的ssh服务器打开文件?
- 20. 如何从服务器目录打开文件?
- 21. 如何从hostmachine(Windows)浏览器打开Vmware(centos)apache服务器
- 22. 如何打开从服务器查看模型
- 23. 如何从Iphone拨打wcf服务
- 24. 如何从Adobe Reader中的Android应用程序在服务器中打开pdf
- 25. 如何从片段开始服务
- 26. 如何打开从
- 27. 如何打开(开关,设置)服务软键盘
- 28. Android打开服务中的蓝牙
- 29. 如何从春天开机正常服务服务worker.js?
- 30. 如何在网络服务器中打开图像
那么用户会致电打开服务中的选项菜单。我有保存在静态类中的当前活动的上下文。所以我可以这样调用:SomeClass.SaticClass.getContext()。openOptionsMenu();?我已经注意到eclipse希望我将getContext()方法的Activity类型化。 – Dogz1