0

我正在开发一个基于 phonegap 的 android 应用程序,并且我正在编写代码来处理通知。这是应该引发通知的代码片段:

Intent notificationIntent = new Intent(context, MainActivity.class);
// set intent so it does not start a new activity
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
        Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent intent =
        PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, title, message, intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, notification);

我想准备 Intent,以便它在与通知内容相关的页面中打开应用程序。到目前为止,我发现的唯一与此相关的是以下行,放置在方法中的MainActivity类(扩展DroidGap类的那个)中onCreate

super.loadUrl("file:///android_asset/www/index.html", 10000);

但我想从上面的代码中动态设置该 URL,或者,在最坏的(或最好的,我真的不知道......)的情况下,将其参数化并将参数从上面的代码传递给 onCreate 方法。我怎么做?提前致谢...

4

1 回答 1

4

您可以将 url 作为附加信息传递给您的意图:

 Intent notificationIntent = new Intent(context, MainActivity.class);
 notificationIntent.putExtra("url", "file:///android_asset/www/page_you_want_to_load.html")

 // set intent so it does not start a new activity
 notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
    Intent.FLAG_ACTIVITY_SINGLE_TOP);

然后在您的活动上重载onNewIntent方法来接收它,并调用 super.loadUrl。如果您SINGLE_TOP像以前一样注册活动,onNewInent(intent)则如果活动已创建,则将调用该方法。

public void onNewIntent(Intent intent){
Bundle extras = intent.getExtras();

if(extras != null){
    if (extras.containsKey("url"))
      //load the url in the parameter
      super.loadUrl(extras.getString(url));
   }
else
   //fall back in case nothing is given, load the default url.
   super.loadUrl("file:///android_asset/www/index.html");    
}

编辑

您应该onNewIntent从您的 onCreate 活动中调用:

  public void onCreate(){
     super.onCreate(savedInstanceState);
      onNewIntent(getIntent());          
}

您有三种可能的情况:

1-您的活动没有运行。用户点击应用图标,启动你的应用。onCreate()按预期运行,getIntent()将返回用于创建您的应用程序的意图。该意图中没有url额外定义,因此您将退回到默认页面。

2-您的活动没有运行。它在过去运行,发出了通知,但由于任何原因活动被终止。用户在栏中有通知。因此,他单击通知并开始您的活动。onCreate()按预期运行,但这次你确实有一个url' extra in your intent, soonNewIntent` 将打开你定义为你的意图的额外 URL。

3-您的活动正在运行。它已创建,现在它仍然存在,但它在后台暂停。用户单击您的通知并将其显示出来。onCreate未调用,因为您的活动已经存在。但是onNewIntent是。根据您定义的意图。所以有一个url额外的,并且该 url 加载到onNewIntent.

有关详细信息,请参阅此问题!

于 2013-05-24T10:10:47.397 回答