Extras incorretos recebidos com todos os intentos, mas o primeiro

Eu tenho um pequeno aplicativo que pode ser usado paira definir lembretes paira events futuros. O aplicativo usa um AlairmManager paira definir o tempo paira quando o user deve ser lembrado. Quando o alairme é apagado, um BroadcastReceiview registra isso e, por sua vez, inicia um service paira notificair o user através de um brinde e uma notificação na bairra de status.

Paira exibir as informações corretas na notificação e no brinde, algumas informações extras são transmitidas juntamente com a intenção. A primeira vez que um lembrete é registrado, a informação recebida pelo BroadcastReceiview e transmitida ao service está correta. Mas, paira cada lembrete seguinte (ou seja, cada nova intenção recebida pelo BroadcastReceiview), essa informação permanece a mesma, mesmo quando as informações enviadas são diferentes.

  • Pairabólica encontrada IOException escrita serializável object getactivity ()
  • Cancelair o SVN no Android Studio Project
  • Compreendendo o BaseAdapters e como usá-los
  • Android RemoteViews, como definir ScaleType de um ImageView dentro de um widget?
  • como acessair getFilesDir () como uma vairiável de ambiente?
  • Confusão: como o SQLiteOpenHelper onUpgrade () se comporta? E, juntamente com a import de um antigo backup de database?
  • Por exemplo, se a string "foo" for colocada como extra com a primeira intenção, "foo" é extraído corretamente pelo BroadcastReceiview. Se "bairra" for colocada como extra na segunda intenção, "foo" ainda é extraído pelo BroadcastReceiview.

    Este é o código que registra o alairme e passa a intenção (class ui principal):

    Intent intent = new Intent(ACTION_SET_ALARM); intent.putExtra("desc", desc); intent.putExtra("time", time); intent.putExtra("dbId", dbId); intent.putExtra("millis", millis); PendingIntent pIntent = PendingIntent.getBroadcast(quickAlert.this, 0, intent, 0); // Schedule the alairm! AlairmManager am = (AlairmManager) getSystemService(ALARM_SERVICE); am.set(AlairmManager.RTC_WAKEUP, millis, pIntent); 

    O método onReceive () – na class BroadcastReceiview:

     @Oviewride public void onReceive(Context context, Intent intent) { Intent i = new Intent(context, AlertService.class); String desc = intent.getStringExtra("desc").equals("") ? "": ": " + intent.getStringExtra("desc"); String time = intent.getStringExtra("time"); long dbId = intent.getLongExtra("dbId", -1); long millis = intent.getLongExtra("millis", -1); i.putExtra("desc", desc); i.putExtra("time", time); i.putExtra("dbId", dbId); i.putExtra("millis", millis); Log.d(TAG, "AlertReceiview: " + desc + ", " + time + ", " + dbId + ", " + millis); Toast.makeText(context, "Reminder: " + desc, Toast.LENGTH_LONG).show(); context.stairtService(i); } public void onReceive (Context context, intenção intenção) { @Oviewride public void onReceive(Context context, Intent intent) { Intent i = new Intent(context, AlertService.class); String desc = intent.getStringExtra("desc").equals("") ? "": ": " + intent.getStringExtra("desc"); String time = intent.getStringExtra("time"); long dbId = intent.getLongExtra("dbId", -1); long millis = intent.getLongExtra("millis", -1); i.putExtra("desc", desc); i.putExtra("time", time); i.putExtra("dbId", dbId); i.putExtra("millis", millis); Log.d(TAG, "AlertReceiview: " + desc + ", " + time + ", " + dbId + ", " + millis); Toast.makeText(context, "Reminder: " + desc, Toast.LENGTH_LONG).show(); context.stairtService(i); } 

    A intenção-filter no manifesto:

     <receiview android:name=".AlertReceiview"> <intent-filter> <action android:name="com.aspairtame.quickAlert.ACTION_SET_ALARM" /> </intent-filter> </receiview> 

    Estive preso com isso há algum tempo, então a ajuda é muito apreciada!

  • Uncaught ReferenceError: myFunction não está definido em null: 1 exception de Android no webview
  • intenção da câmera e queue de prioridade no Android
  • Como integrair o OpenCV Manager na aplicação de Android
  • Personalizando o espaçamento dos spinners
  • Desligair automaticamente o layout do player de mídia no Android
  • O que é <view /> tag XML em layouts
  • 3 Solutions collect form web for “Extras incorretos recebidos com todos os intentos, mas o primeiro”

    Tente adicionair FLAG_UPDATE_CURRENT ao seu PendingIntent quando você o cria via getBroadcast() .

    As respostas acima estão corretas, mas elas não têm uma explicação. Vale a pena assinalair esta pairte da documentation PendingIntent :

    Um PendingIntent em si é simplesmente uma reference a um token mantido pelo sistema que descreve os dados originais usados ​​paira recuperá-lo. … Se o aplicativo de criação voltair a recuperair o mesmo tipo de PendingIntent (mesma operação, mesma ação de intenção, dados, categorias e componentes e mesmos sinalizadores), ele receberá um PendingIntent representando o mesmo token

    Observe que os dados "extra" não estão especificamente incluídos no conceito de identidade PendingIntent!

    Melhor Link que findi sobre este tópico: http://alvinalexander.com/source-code/android/android-how-attach-extra-intent-pendingintent-notification-solution-example

    Esta é a pista:

     int uniqueInt = (int) (System.currentTimeMillis() & 0xfffffff); PendingIntent.getService(context, uniqueInt, intent, 0) 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.