Android推送通知:通过点击通知获取数据,存储和显示新活动

Man*_*gde 3 notifications android push-notification android-notifications google-cloud-messaging

我正在开发一个具有推送通知功能的应用程序.我按照以下链接作为Android推送通知

我尝试并成功发送URL并通过在generateNotification()代码中进行以下更改来点击通知打开网页.

/**
 * Issues a notification to inform the user that server has sent a message.
 */
private static void generateNotification(Context context, String message) {
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notification = new Notification(R.drawable.ic_launcher, "Message received", System.currentTimeMillis());
    // Hide the notification after its selected
    notification.flags |= Notification.FLAG_AUTO_CANCEL;

    //adding LED lights to notification
    notification.defaults |= Notification.DEFAULT_LIGHTS;

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse(message));
    //startActivity(browserIntent);

    //PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
    notification.setLatestEventInfo(context, "Message", "New message received", pendingIntent);
    notificationManager.notify(0, notification);
Run Code Online (Sandbox Code Playgroud)

我可以在服务器的推送通知的帮助下发送数据.现在我想执行以下任务:

  1. 通过推送通知发送JSON数据.

  2. 将数据保存到SQLite数据库中.

  3. 点击推送通知打开新活动.

  4. 显示来自新活动的推送通知的数据.

  5. 如果应用程序已关闭,那么点击通知后应用程序就会启动.

因此,请指导我应该遵循哪些步骤来执行上述任务.

Man*_*gde 11

我解决了以下问题:

  1. 通过推送通知发送JSON数据.答:能够在大小为4kb的PHP JSON服务的帮助下从SERVER发送数据.

  2. 将数据保存到SQLite数据库中.A.当数据来自onMessage()中的推送通知时,在SQLite中保存数据

    protected void onMessage(Context context, Intent intent) {
        Log.i(TAG, "Received message");
        String message = intent.getExtras().getString("price");
        Log.d("OnMSG",message);
    
        displayMessage(context, message);
    
        DataBaseHelper dataBaseHelper = new DataBaseHelper(context);
        dataBaseHelper.openDataBase();
        dataBaseHelper.insertData(message);
        dataBaseHelper.close();
    
        // notifies user
        generateNotification (context, message);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 点击推送通知打开新活动.答:我使用onMessage()调用的生成通知函数中的待定意图来完成此操作.

    private static void generateNotification(Context context, String message) {
        int icon = R.drawable.ic_launcher;
        long when = System.currentTimeMillis();
        NotificationManager notificationManager = (NotificationManager)
            context.getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = new Notification(icon, message, when);
    
        String title = context.getString(R.string.app_name);
    
        Intent notificationIntent = new Intent(context, MainActivity.class);
        notificationIntent.putExtra("ms", message);
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
        notification.setLatestEventInfo(context, title, message, intent);
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
    
        notification.defaults |= Notification.DEFAULT_SOUND;
    
        notification.defaults |= Notification.DEFAULT_VIBRATE;
        notificationManager.notify(0, notification);     
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 显示来自新活动的推送通知的数据.答:这实现了当新活动在点击通知时调用(从第3点代码开始)我在主要活动onCreate()中从SQLite获取数据.

    DataBaseHelper dataBaseHelper = new DataBaseHelper(this);
    dataBaseHelper.openDataBase();
    Cursor c = dataBaseHelper.getData();
    String data = null;
    if(c.getCount()>0){
        if(c.moveToFirst()){
            do{
            data = c.getString(0);
        } while(c.moveToNext());
        }
    } else {
        data = "No Data";
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 如果应用程序已关闭,那么点击通知后应用程序就会启动.A.此任务从第3点开始实现.