gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 20:56:31 24 4
gpt4 key购买 nike

我正在使用 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);

当用户点击通知时,应用确实会出现在前面,但在之前离开的同一窗口中,而不是想要的窗口。

我快到了,给我一点插入。

谢谢。

最佳答案

好吧,我来回答我自己的问题,我浪费了整整 2 天的时间来执行此操作,我开始认为没有一个庞大的钛开发者社区,无论如何这里有一些要点:

  1. 没有与android通知相关的Alloy示例状态栏,所有的例子都是经典的钛应用,所以我不得不猜测我的 Activity js 文件应该放在哪里。
  2. 特别注意 Intent 标志,我搞砸了。我用了FLAG_ACTIVITY_RESET_TASK_IF_NEEDED,根据 android official documentation , 听起来不错,但在钛中却不行工作。我避免在这种情况下使用操作,此 Intent 只有 flagsurl 属性。
  3. 同样,挂起的 Intent 应该只有activityflags属性。

在 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 中声明 Activity ,此配置必须在 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>

**重要,如果你使用的是合金,你的 Activity js 文件必须在

app > assets > android

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

关于android - 钛安卓通知必须打开特定窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27539563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com