钛安卓通知必须打开特定的窗口

时间:2014-12-18 05:03:50

标签: android titanium titanium-alloy

我正在使用Titanium appcelerator(使用合金)创建Android应用,我创建状态栏通知,问题是当通知出现时,我想打开一个特定窗口并在用户点击时传递一些数据通知,所以我的代码是:

// Intent object to launch the application
var intent = Ti.Android.createIntent({
    action : Ti.Android.ACTION_MAIN,
    flags : Ti.Android.FLAG_ACTIVITY_CLEAR_TOP | Ti.Android.FLAG_ACTIVITY_NEW_TASK,
    url : "window.js"
});
intent.addCategory(Ti.Android.CATEGORY_LAUNCHER);
intent.putExtra("id", "10");
var activity = Ti.Android.currentActivity;
// Create a PendingIntent to tie together the Activity and Intent
var pending = Titanium.Android.createPendingIntent({
    activity : activity,
    intent : intent,
    type : Ti.Android.PENDING_INTENT_FOR_ACTIVITY,
    flags : Titanium.Android.FLAG_CANCEL_CURRENT
});

// Create the notification
var notification = Titanium.Android.createNotification({
    // icon is passed as an Android resource ID -- see Ti.App.Android.R.
    icon : Ti.App.Android.R.drawable.appicon,
    contentTitle : 'Something Happened',
    contentText : 'Click to return to the application.',
    contentIntent : pending,
    flags : Ti.Android.ACTION_DEFAULT | Ti.Android.FLAG_AUTO_CANCEL | Ti.Android.FLAG_SHOW_LIGHTS
});
// Send the notification.
Titanium.Android.NotificationManager.notify(1, notification);

当用户点击通知时,实际上,应用程序会出现在前面,但是在同一个窗口中,不是完全想要的窗口。

我几乎在那里,给我一点推力。

感谢。

1 个答案:

答案 0 :(得分:2)

好的,我在这里回答我自己的问题,我浪费了整整2天的时间来表达这一点,我开始认为没有一个大的钛开发社区,无论如何一些重要的点在这里:

  1. 没有与android通知相关的Alloy示例 状态栏,所有的例子都是经典的钛应用,所以我 不得不猜测应该把我的活动js文件放在哪里。
  2. 特意注意意图标志,我搞砸了。我用了 根据{{​​3}},FLAG_ACTIVITY_RESET_TASK_IF_NEEDED可能听起来不错,但在钛合金中却没有 工作。我避免在这种情况下使用操作,此Intent只有flagsurl属性。
  3. 同样,待定意图应该只有activityflags 属性。
  4. 使用Titanium 3.4.0.GA的代码是:

    // Intent object to launch the application
    var intent = Ti.Android.createIntent({
        flags :  Ti.Android.FLAG_ACTIVITY_NEW_TASK | Ti.Android.FLAG_ACTIVITY_SINGLE_TOP,
        url: "videocomplete.js"
    });
    intent.addCategory(Ti.Android.CATEGORY_LAUNCHER);
    intent.putExtra("id", "10");
    var activity = Ti.Android.currentActivity;
    // Create a PendingIntent to tie together the Activity and Intent
    var pending = Titanium.Android.createPendingIntent({
        intent : intent,
        flags : Titanium.Android.FLAG_CANCEL_CURRENT
    });
    
    // Create the notification
    var notification = Titanium.Android.createNotification({
        // icon is passed as an Android resource ID -- see Ti.App.Android.R.
        icon : Ti.App.Android.R.drawable.appicon,
        contentTitle : 'Something Happened',
        contentText : 'Click to return to the application.',
        contentIntent : pending,
        flags : Ti.Android.ACTION_DEFAULT | Ti.Android.FLAG_AUTO_CANCEL | Ti.Android.FLAG_SHOW_LIGHTS
    });
    // Send the notification.
    Titanium.Android.NotificationManager.notify(1, notification);
    

    重要声明在tiapp.xml中声明活动,此配置必须在android节点

    <activities>
            <activity url="youractivityfile.js">
                <intent-filter>
                    <action android:name="android.intent.action.VIEW"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <category android:name="android.intent.category.BROWSABLE"/>
                </intent-filter>
            </activity>
        </activities>
    

    **重要的是,如果您使用合金,您的活动js文件必须在

      

    app&gt;资产&gt;机器人

    当用户点击通知时,将执行该文件中的代码。**