我有一个后台服务,我会在应用程序启动后立即启动。如果有新数据可用,此后台服务每5秒向服务器发出一次请求,只要有新数据我就会创建通知。当我点击通知应用程序被启动时,但我无法检索我在创建通知时添加的意图额外参数。
代码下方: 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”,这样我就可以知道我点击了哪个通知并显示了正确的数据。
到目前为止,我发现的通知只是如何午餐应用程序,这确实有效,但没有明确的示例如何获取通知详细信息。 我遵循了link和docs,但我使用的是合金模型。
如果有用,我也会添加我的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你可以克隆它并尝试,看看你是否可以改变一些东西......它还没有用,我还在努力解决这个问题。 感谢您提供任何帮助或反馈!
答案 0 :(得分: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并且我不明白为什么..
答案 1 :(得分:0)
我用Ti.Android.FLAG_ACTIVITY_NEW_TASK |替换了标志Ti.Android.FLAG_ACTIVITY_MULTIPLE_TASK,它的工作完美。它会重新启动应用程序,但它可以正常运行。
您也忘了将“type:Titanium.Android.PENDING_INTENT_FOR_ACTIVITY”添加到待处理状态。
答案 2 :(得分:0)
这里的js模块我用
https://gist.github.com/muka/d4afae20a5732f3937e8
当app处于后台或前台时,似乎正确响应
基本上,主要活动会监听newintent
事件并在作为参数收到的意图附加内容中查找预期数据
我很想知道它是否适用于不同的用例,请告诉我。
由于