原本想要實現的事情很簡單,就是收到asp server端的push後,app自己做一個Intent放進Notification後丟出去,然後使用者按下Notification的通知後,在app的webView中打開預先存在Intent中的網址。
事前GCM跟asp的準備當然要先搞定。然後開始準備來存取Intent物件。
第一個先嘗試用putExtra:
Ti.Android.currentActivity.addEventListener('resumed',function(e){ var intent = Titanium.Android.currentActivity.getIntent(); var _url = intent.getStringExtra("gotoURL"); //$.webview.url = _url; }); var intent = Ti.Android.createIntent({ action : Ti.Android.ACTION_MAIN, className : 'tw.idv.Justflyctivity', flags : Ti.Android.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Ti.Android.FLAG_ACTIVITY_SINGLE_TOP }); intent.putExtra("gotoURL","http://justfly.idv.tw"); intent.addCategory(Ti.Android.CATEGORY_LAUNCHER); var pending = Ti.Android.createPendingIntent({ intent : intent, type : Ti.Android.PENDING_INTENT_FOR_ACTIVITY, flags : Ti.Android.FLAG_ACTIVITY_NO_HISTORY }); var notification = Titanium.Android.createNotification({ icon: Ti.App.Android.R.drawable.notification_icon, contentIntent : pending, contentTitle : e.data.title, contentText : _message[0], tickerText: _message[0], flags:Titanium.Android.ACTION_DEFAULT | Titanium.Android.FLAG_AUTO_CANCEL | Titanium.Android.FLAG_SHOW_LIGHTS }); Titanium.Android.NotificationManager.notify(1, notification); |
然後發現不管再怎麼試,_url都沒有東西。
然後改用scheme的方式(就是讓其他的app也可以透過像是「Justfly://」的方式打開自己的app):
首先設定tiapp.xml:
<android xmlns:android="http://schemas.android.com/apk/res/android"> <manifest android:versionCode="1" android:versionName="1" package="tw.idv.justfly" xmlns:android="http://schemas.android.com/apk/res/android"> <application android:debuggable="false" android:icon="@drawable/appicon" android:label="justfly" android:name="JustflyApplication"> <activity android:configChanges="keyboardHidden|orientation" android:label="justfly" android:name=".JustflyActivity" android:theme="@style/Theme.Titanium"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="tw.idv.justfly" android:scheme="Justfly"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest><a href="https://jira.appcelerator.org/browse/TIMOB-7249?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel"></a> </android> |
然後在index.js加入:
Ti.Android.currentActivity.addEventListener('resumed',function(e){ var intent = Titanium.Android.currentActivity.getIntent(); alert('getData='+intent.getData()); }); var intent = Ti.Android.createIntent({ action: Ti.Android.ACTION_VIEW, data : "Justfly://tw.idv.justfly?url="+gotoURL }); var pending = Ti.Android.createPendingIntent({ intent : intent, type : Ti.Android.PENDING_INTENT_FOR_ACTIVITY, flags : Ti.Android.FLAG_ACTIVITY_NO_HISTORY }); var notification = Titanium.Android.createNotification({ icon: Ti.App.Android.R.drawable.notification_icon, contentIntent : pending, contentTitle : e.data.title, contentText : _message[0], tickerText: _message[0], flags:Titanium.Android.ACTION_DEFAULT | Titanium.Android.FLAG_AUTO_CANCEL | Titanium.Android.FLAG_SHOW_LIGHTS }); Titanium.Android.NotificationManager.notify(1, notification); |
只可惜getData永遠都是null的狀態…….
後來才在這裡發現,titanium的intent好像在android中是少了一大塊, getData(), getAction(), getType()都完全擷取不到…..所以目前只能宣告放棄,讓app按下Notification後打開app本身而已。