代码之家  ›  专栏  ›  技术社区  ›  Hadis

Android-推送通知仅显示最后一个ID

  •  0
  • Hadis  · 技术社区  · 8 年前

    我有一个用推送通知创建常规任务的应用程序。当我添加多个任务(每个任务都有一个唯一的ID)并出现“推送通知”时,它会显示上一个任务的数据。 我和Logcat确认过 任务活动 每个任务都有一个唯一的ID,但是 报警服务 只显示最后输入的任务。

    我搜索了很多,但也找不到任何关于哪里出了问题的线索。

    我也变了 PendingIntent.FLAG_UPDATE_CURRENT FLAG_CANCEL_CURRENT FLAG_ONE_SHOT 但它不起作用。

    我想加一个 intent

    任务活动

       .
       .
       .
        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);
        }
    

    报警接收器

     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 回复  |  直到 8 年前
        1
  •  1
  •   corneliouz Bett    8 年前

    我认为你把任务的细节保存在一个变量中是犯了一个错误( 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