如何在适用于 Android 和 cordova 的项目中单击通知时显示特定页面?

Posted

技术标签:

【中文标题】如何在适用于 Android 和 cordova 的项目中单击通知时显示特定页面?【英文标题】:How to show a specific page on clicking a notification in a project that works with Android and cordova? 【发布时间】:2014-02-25 11:43:29 【问题描述】:

我在我的项目中使用 cordova 3.3.1

我打算在 android 设备的状态栏通知中显示我的通知。为了实现这一点,我在 GCMIntentService 类中操作了 createNotification() 函数,现在我收到了通知。

现在我将在单击通知时显示特定页面(这取决于通知类型)。您对此有任何想法,我不知道如何实现这部分? 我只知道如果我修改扩展 CordovaActivity 的 java 类,那么无论何时 我运行“cordova build”命令,我会丢失所有代码,因为这个类将由 科尔多瓦。这是我的代码:

  --------------in my class GCMIntentService---------------------------
    public void createNotification(Context context, Bundle extras)
   

    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    String appName = getAppName(this);

    Intent notificationIntent = new Intent(this, G3Tracker.class);
    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    notificationIntent.putExtra("pushBundle", extras);

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(context)
            .setDefaults(Notification.DEFAULT_ALL)
            .setSmallIcon(context.getApplicationInfo().icon)
            .setWhen(System.currentTimeMillis())
            .setContentTitle(extras.getString("title"))
            .setTicker(extras.getString("title"))
            .setContentIntent(contentIntent);

    String message = extras.getString("message");
    if (message != null) 
        mBuilder.setContentText("You recieved a new notification: " + message);

     else 
        mBuilder.setContentText("message");

    

 ----------------------------------------------------- 
            public class G3Tracker extends CordovaActivity 
 
      @Override
       public void onCreate(Bundle savedInstanceState)
  
         super.onCreate(savedInstanceState);
         super.init();
      // Set by <content src="index.html" /> in config.xml
         super.loadUrl(Config.getStartUrl());
       //super.loadUrl("file:///android_asset/www/index.html")
   
 

【问题讨论】:

【参考方案1】:
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notif = new Notification(com.project.R.drawable.app_icon, "heading title", System.currentTimeMillis());
CharSequence from = "application name";
CharSequence message = "message which you want to show";
intent = new Intent(MyActivity.this,ShowActivity.class);
intent.putExtra("NotifID", notifID);
pendingIntent= PendingIntent.getActivity(MyActivity.this, notifID, intent, PendingIntent.FLAG_UPDATE_CURRENT| PendingIntent.FLAG_ONE_SHOT);
notif.setLatestEventInfo(this, from, message, intent);
notif.flags |= Notification.FLAG_AUTO_CANCEL;
notif.vibrate = new long[]  100, 250, 100, 500 ;
nm.notify(notifID, notif);
finish();

试试这个对我有用的代码,如果您有任何疑问,请回复我。

【讨论】:

感谢您的回复,但是您在哪里定义您的目的地? intent = new Intent(MyActivity.this,ShowActivity.class);

以上是关于如何在适用于 Android 和 cordova 的项目中单击通知时显示特定页面?的主要内容,如果未能解决你的问题,请参考以下文章

Cordova:适用于 Android 的 Facebook 插件构建错误

如何将适用于 Android 的 Pushwoosh 插件添加到 Cordova IBM Worklight (@Eclipse)?

适用于 android 的 Cordova '本机文件选择器'插件不起作用

Cordova 相机插件适用于模拟器,而不适用于 Android 设备

Phonegap/Cordova Geolocation 不适用于 Android 4.0+,但适用于所有其他平台

如何清除适用于 iOS 平台的 Cordova 应用程序的 localStorage