2014-04-08 29 views
0

我有一个后台服务,我应该午餐时立即开始。如果有新的数据可用,此后台服务会每5秒钟向服务器询问一次有新数据,我会创建通知。当我点击通知应用程序时,但我无法检索我在创建通知时添加的意图附加参数。Titanium Android通过通知检索意图演员

代码如下: index.js

startService(); 

function startService(){ 
    if(OS_ANDROID){ 
     log("START SERVICE"); 
     var intent = Titanium.Android.createServiceIntent({ 
     url: 'service.js' 
    }); 
    Titanium.Android.startService(intent); 
    } 
    } 





//=========================================== 
// I tried to add this code so that I could get the intent but it does not work 

if(OS_ANDROID){ 


    log("==========================" + JSON.stringify(Ti.Android.currentActivity)); 
     // prints : {"bubbleParent":true,"actionBar":{"navigationMode":0,"bubbleParent":true,"title":null,"apiName":"Ti.Android.ActionBar"},"apiName":"Ti.Android.Activity"} 



    var _intent = Ti.Android.currentActivity.getIntent(); 
    log(JSON.stringify(_intent)); 
    //prints {"bubbleParent":true,"action":null,"type":null,"data":null,"flags":268435456,"apiName":"Ti.Android.Intent"} 



    if (_intent.hasExtra('ntfId')) { 
     log("========= INTENT HAS EXTRA ========="); 
    }else{ 
     log("========= NO INTENT HAS EXTRA ========="); 
    } 


    var currActivity = Titanium.Android.currentActivity; 
    var passedInText = currActivity.getIntent().getStringExtra(Ti.Android.EXTRA_TEXT); 
    log(passedInText); 
    //prints null 

} 

service.js

function createNotification(data){ 
log(data.id + " <<<<<<>>>>>> " + data.type); 
var activity = Ti.Android.currentActivity; 
var intent = Ti.Android.createIntent({ 
    className : 'packageName.AppNameActivity', 
    action: Ti.Android.ACTION_MAIN, 
    packageName: Ti.App.id, 
    flags: Ti.Android.FLAG_ACTIVITY_NEW_TASK | Ti.Android.FLAG_ACTIVITY_SINGLE_TOP 
}); 
intent.addCategory(Titanium.Android.CATEGORY_LAUNCHER); 

intent.putExtra("ntfId", data.id); 

var pending = Ti.Android.createPendingIntent({ 
    intent : intent 
}); 

var notification = Ti.Android.createNotification({ 
    contentIntent : pending, 
    contentTitle : data.title, 
    contentText : data.desription, 
    tickerText : "AppName", 
    icon : Ti.App.Android.R.drawable.appicon, 
    sound: 'default', 
    defaults: Titanium.Android.NotificationManager.DEFAULT_VIBRATE, 
    flags : Titanium.Android.ACTION_DEFAULT | Titanium.Android.FLAG_AUTO_CANCEL | Titanium.Android.FLAG_SHOW_LIGHTS 
}); 



Ti.Android.NotificationManager.notify(data.notification_id, notification); 
} 

我想我的应用程序打开时得到 “ntfId”,这样我就可以知道我点击的通知和显示正确的数据。

到目前为止,我发现的通知是如何午餐的应用程序,并确实工作,但没有明确的例子如何获得通知细节。 我跟着这linkdocs,但我使用合金模型。

如果它是有用的,我要添加TiApp.xml太:

<android xmlns:android="http://schemas.android.com/apk/res/android"> 
    <manifest> 
     <uses-permission android:name="android.permission.VIBRATE"/> 
     <application android:debuggable="true"> 
      <activity 
       android:configChanges="keyboardHidden|orientation" 
       android:name="org.appcelerator.titanium.TiActivity" 
       android:screenOrientation="portrait"/> 
      <activity 
       android:configChanges="keyboardHidden|orientation" 
       android:label="Appname" 
       android:launchMode="singleTask" 
       android:name=".AppnameActivity" 
       android:screenOrientation="portrait" android:theme="@style/Theme.Titanium"> 
       <intent-filter> 
        <action android:name="android.intent.action.MAIN"/> 
        <category android:name="android.intent.category.LAUNCHER"/> 
       </intent-filter> 
      </activity> 
     </application> 
    </manifest> 
    <services> 
     <service url="service.js"/> 
    </services> 
</android> 

我如何从通知的意图通过了额外的参数?似乎当我做getCurrentActivity.getIntent()这是另一种意图完全不同于我想要的。

你能告诉我一些事情或指向的地方,也许我错过了看? 谢谢!

最后编辑 我被推gihub我的项目,TiAndroidNotification你可以克隆它,并尝试,看看你能不能改变的东西。它不工作呢,我还在努力尝试解决这个问题。 。 感谢您的任何帮助或反馈!

回答

1

我认为它的一半。 当挂起意图创建我们应该加上连活动:

var activity = Ti.Android.currentActivity; 
var pending = Ti.Android.createPendingIntent({ 
    activity:activity, 
    intent : intent 
}); 

和index.js我得到这样的:

var act = Titanium.Android.currentActivity; 
var _intent = act.intent; 
var message = _intent.getStringExtra("ntfId"); 

这工作只要确定我关闭应用程序,但如果应用程序只是在后台,我点击通知它通过null,我不明白为什么..

+0

你可以请显示你的最终代码,如果你有它的工作。即使我被困在同样的问题。应用程序打开,但我得到NULL值与getStringExtra函数 – Maverick

+0

我仍然在这工作..我还没有解决方案 – linnal

0

我已经用Ti.Android.FLAG_ACTIVITY_NEW_TASK | Ti.Android.FLAG_ACTIVITY_MULTIPLE_TASK,它的工作完美。它重新启动应用程序,但它工作。

并且您忘了将“type:Titanium.Android.PENDING_INTENT_FOR_ACTIVITY”添加到挂起。

+0

你好@ mihai-blaga,我试过了,但它停止在启动画面。我创建了一个github项目,如果你有时间可以尝试它并进行你想要的修改并让我知道:) [gi​​thub_project](https://github.com/linnal/TiAndroidNotification) – linnal

0

这里的JS模块我使用

https://gist.github.com/muka/d4afae20a5732f3937e8

好像正确响应时,应用程序在背景或前景

基本上,主要活动听newintent事件,并寻找预期的数据在作为参数收到的意向演员

我很好奇,看看它是否适用于不同的用例,让我知道。

谢谢