[TITANIUM] 自定模組

LINEで送る
[`evernote` not found]

[TITANIUM] 自定模組
承繼之前在「[TITANIUM] ALLOY與GCM的應用」中使用Google-Cloud-Messaging-Titanium來實現android與接收GCM的訊息後。隨之而生的問題是當我們在「啟動一次app,保持在背景動作的情況下重新開機後」就收不到push了。
雖然也有網友使用0.6版可以解決問題,只是我從0.2版用到0.6版,收不到就是收不到@@
看了Google-Cloud-Messaging-Titanium的issues後,有很多人都主張重組模組。但是一開始當看到官方說明,一張落落長要安裝的工具就頭皮發麻….

不過經過測試,發現問題在於當app啟動時,C2dmModule.java,CommonUtilities.java,GCMIntentService.java會被註冊到service中。當service停止時GCM模組的Instance就被丟棄,所以GCMIntentService.java中

137
138
139
		if (C2dmModule.getInstance() != null){
			C2dmModule.getInstance().sendMessage(data);
		}

就無法被執行。
解決的辦法是把他改寫成:

137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
		if (C2dmModule.getInstance() != null){
			C2dmModule.getInstance().sendMessage(data);
		}else {
			NotificationManager mManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
			Notification n = new Notification();
			Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("Justfly://tw.idv.justfly"));
			PendingIntent pi = PendingIntent.getActivity(this, 0, i, 0);
 
			n.icon = 2130837504;
			n.tickerText = messageArr[0];
			n.number = 1;
			n.flags = 1073741824;
			n.defaults |= Notification.DEFAULT_VIBRATE;
			n.setLatestEventInfo(getApplicationContext(), "Justfly", messageArr[0], pi);
			mManager.notify(1, n);
 
			Vibrator vib = (Vibrator)getSystemService(VIBRATOR_SERVICE);
			vib.vibrate(500);
		}

然後….還是要重祖一次模組@@
重組方式可以參考Google-Cloud-Messaging–Titanium- モジュールを作る官方說明。我只列一下我在重組時碰到的問題跟解決方式:

  1. ERR:Compile failed; see the compiler error output for details.You may need to install the Command Line Tools package through XCode, in case you haven’t done so yet的錯誤訊息。
    ANS:可以參考這篇的回答去安裝Command Line Tools for Xcode跟重新命名模組專案。但是我後來是用命令列下ANT指令才解決。
  2. ERR:Compile failed; see the compiler error output for details.You may need to install the Neither the ANDROID_NDK environment variable, or the android.ndk property is not set to an existing Android NDK installation (check your module’s build.properties)的錯誤訊息。
    ANS:除了把Android NDK下載回來外,記得到build.properties加入:
    android.ndk=/Users/justfly/Documents/android-ndk-r8d
    指定ndk的位置

原本我一直覺得很怪的是,我明明是要做android的模組,為何他一直要我安裝xcode的Command Line Tools!?但是後來在titanium studio中的命令列中用ant指令來執行成功一次之後,那個錯誤訊息就不見了。目前依然..原因不明…..
(Photo via 1uplego, CC License)

2 則迴響於《[TITANIUM] 自定模組

回應已關閉。