Android-push-уведомление показывает только последний идентификатор - PullRequest
0 голосов
/ 25 мая 2018

У меня есть приложение для создания рутинных задач с push-уведомлениями.Когда я добавляю несколько задач (каждая имеет уникальный идентификатор), и появляется push-уведомление, в котором содержатся данные последней задачи.Я проверил с помощью LogCat и убедился, что в TaskActivity каждая задача имеет уникальный идентификатор, но в AlarmService отображается только последняя введенная задача.

Я ищу много итакже, но я не мог найти подсказки о том, что пошло не так.

Я также изменил PendingIntent.FLAG_UPDATE_CURRENT на FLAG_CANCEL_CURRENT и FLAG_ONE_SHOT, но это не сработало.

Я думал одобавив intent для каждой задачи, но я не смог найти способ сделать это.

TaskActivity

   .
   .
   .
    public void setNotificationForNewTaskInside() {
    alarmManager = (AlarmManager) getApplicationContext().getSystemService(
            ALARM_SERVICE);
    Intent alarmIntent = new Intent(this,AlarmReceiver.class);

    Random random = new Random();
    randomNum= random.nextInt(9999 - 1000) + 1000;

     pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
             randomNum, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    if (DeviceTimeAndDate.devicetaskTimeDate.equals(newtaskTimeDate)) {

       finalLong=System.currentTimeMillis();

        alarmManager.setExact(AlarmManager.RTC_WAKEUP, finalLong, pendingIntent);

    }
   else   if (DeviceTimeAndDate.devicetaskTimeDate.before(newtaskTimeDate)) {

       finalLong=new_task_timeInMilliseconds;
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, finalLong, pendingIntent);

    } else if (DeviceTimeAndDate.devicetaskTimeDate.after(newtaskTimeDate)) {

        Toast.makeText(context, "زمان یا تاریخ مورد گذشنه است، لطفا زمان دیگری را انتخاب کنید", Toast.LENGTH_SHORT).show();
        startDate.setText(DeviceTimeAndDate.deviceTime);
        taskTime.setText(EditTaskActivity.secondMiConver);
    }

AlarmReciver

 public class AlarmReceiver  extends BroadcastReceiver {
 String TAG = "AlarmReceiver";
  public RemoteViews remoteViews;
public  Uri sound;
public Context context;
public Notification notification;
int finalRandumNum;
 public  static String getTitle,getTime;
public AlarmReceiver (){
}

@Override
    public void onReceive(Context context, Intent intent) {

    sound = Uri.parse("android.resource://" + context.getPackageName() + "/raw/plucky");
      remoteViews= new RemoteViews(context.getPackageName(), R.layout.notification);
        remoteViews.setImageViewResource(R.id.notif_image, R.mipmap.ic_launcher);
      remoteViews.setTextViewText(R.id.title,getTitle);
     remoteViews.setTextViewText(R.id.text,getTime);

    NotificationManager notif=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    android.app.Notification notify=new NotificationCompat.Builder(context, "CHANNEL_ID")
            .setContentTitle(TaskActivity.subjEntry)
            .setWhen(finalLong)
            .setSound(sound)
            .setContentText(TaskActivity.timeEntryy)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentIntent(TaskActivity.pendingIntent)
            .build();

    notif.notify(TaskActivity.randomNum, notify);

1 Ответ

0 голосов
/ 25 мая 2018

Я думаю, что вы делаете ошибку, сохраняя сведения о задачах в переменной ( TaskActivity.subjEntry и TaskActivity.timeEntryy ), что означает, что данные заменяются каждый раз, когда вы пытаетесь добавить новую задачу.

Таким образом, вы должны сохранить свои данные в базе данных, массиве или любой другой структуре данных и извлечь данные при создании уведомления.

сохранить данные в SQlite DB

 public void addData(Data data){

    SQLiteDatabase database = getWritableDatabase();
    ContentValues cv_data = new ContentValues();
    cv_data.put("key", data.key());
    cv_data.put("subjEntry", data.subjEntry());
    cv_data.put("subjTime", data.subjTime());

   database.insert("tablename",null,cv_data);
   database.close();
}

Нижекод для извлечения данных из базы данных SQLite

   public List<Data> getData(String key){

    String columns [] = {
         "key", "subjEntry", "subjTime"
    };

    String sortingOrder = " subjTime ASC";

    List <Data> dataList = new ArrayList <Data>();

    SQLiteDatabase mdDatabase = getWritableDatabase();

    Cursor cursor = mdDatabase.query("tablename",
            columns,
            null,
            null,
            null,
            null,
            sortingOrder);
    if (cursor.moveToFirst()){
        do {
        if(cursor.getString(cursor.getColumnIndex("subjEntry")).equals(Key)){
        }
           Data data = new Data();
           data.setsubjEntry(cursor.getString(cursor.getColumnIndex("subjEntry")));
           data.setsubjTime(cursor.getString(cursor.getColumnIndex("subjTime")));
           dataList.add(data);
        }while (cursor.moveToNext());
    }
    mdDatabase.close();
    cursor.close();

    return dataList;
}'

В качестве альтернативы попробуйте Firebase JobDispatcher

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...