我是Android編程的相對新手(我主要在Windows上執行C#)。我繼承了一些由服務和應用程序組成的代碼。我想在另一個應用中重複使用該服務和一些應用。我把它放在一個圖書館裏。除了一個問題,一切都進展順利。該服務有一些代碼將主要活動放在屏幕上。它通過名字叫出這個活動。顯然,我不能用普通的代碼。該服務代碼看起來像這樣:在Android應用程序中分離邏輯和GUI。服務有應用程序的知識,不應該
final int NOTIFY_1 = 0x1001;
NotificationManager notifier = (NotificationManager) context.getSystemService(
Context.NOTIFICATION_SERVICE);
final Notification notify = new Notification(
R.drawable.icon_my_color, ticker, System.currentTimeMillis());
notify.number = 1;
notify.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;
notify.ledARGB = android.graphics.Color.CYAN;
notify.ledOnMS = 500;
notify.ledOffMS = 500;
Intent toLaunch = new Intent(context, MyBankingActivity.class);
toLaunch.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent intentBack = PendingIntent.getActivity(context, 0, toLaunch, PendingIntent.FLAG_CANCEL_CURRENT);
notify.setLatestEventInfo(context, title, message, intentBack);
notifier.notify(NOTIFY_1, notify);
當有趣的事情發生時(銀行帳戶變爲負值或某物),此代碼將由服務運行。問題是上面硬編碼的「MyBankingActivity.class」。我從庫中刪除了MyBankingActivity,因爲它是特定於應用程序的。不過,我必須讓舊應用程序工作。我只是希望它被分離成一個庫和應用程序,所以我可以在另一個應用程序中重用庫中相當多的邏輯。在另一個應用程序中,我不特別想要通知這個「銀行事件」 。即使我這樣做了,代碼當前也是用一個活動的名稱進行硬編碼的。
什麼是在這裏分開邏輯的正確方法?似乎該服務應該「發佈」該事件,而感興趣的應用程序應該「訂閱」。至少這是我熟悉的術語。順便說一下,現在,我剛剛註釋掉了整個代碼塊,並且在舊應用程序中一切正常,除了獲得此通知外。
我知道(道歉),我的問題是廣泛的。因爲「教一個人釣魚,而不是給他釣魚」可能會更好,請隨意推薦更廣泛地涵蓋此主題的參考資料/文章/書籍。我試圖單獨看看自己有限的圖書館,但是無論我的書籍是否過於介紹(Android in Action是one)還是我正在尋找錯誤的地方。即使建立圖書館和寫作服務的主題似乎也很難實現。在我看來,有我弱的幾個關鍵概念: 1.如何做一個服務通信事件有興趣沒有應用 2.如何能在應用被帶到基於前景的知識應用從服務收到的一些消息 3.如何獲取現有的應用程序並打入庫(適用於非GUI或非特定於應用程序的應用程序)和應用程序。 4通知如何工作....
提前許多感謝, 戴夫
'notify'是一個java關鍵字,不應該用作變量名稱 – NikkyD 2011-12-28 18:16:00
是的,嘗試使用_notify,如果你不想改變你的var的約定iables。 – 2011-12-28 18:25:17