我有一個服務(用於通信)需要調用當前運行活動的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