[TITANIUM]的Intent與Notification

LINEで送る
[`evernote` not found]

原本想要實現的事情很簡單,就是收到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本身而已。