Ich habe mit lokalen Benachrichtigungen herumgespielt. Ich versuche, Daten an den BroadcastReceiver zu senden. Mir ist aufgefallen, dass der unten stehende Code mit Lollipop funktioniert aber auf meinem Nexus 6P mit 7.1 nicht. DieseÜbergeben von Daten an einen BroadcastReceiver von einem PendingIntent (AlarmManager)
ist, wie ich Setup die Absichten und die 'Extra' Daten hinzufügen:
val am = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val alarmIntent = Intent(context, AlarmReceiver::class.java)
alarmIntent.putExtra("data", data)
val pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT)
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), (1000 * 60).toLong(), pendingIntent) // Millisec * Second * Minute
Im BroadcastReceiver:
val pm = context.getSystemService(Context.POWER_SERVICE) as PowerManager
val wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "")
wl.acquire()
val data = intent.getParcelableExtra<MyData>("data")
das Problem googeln nicht viel bringen, was es tut, bring up ist ein SO-Post und ein Kommentar, der genau dieses Problem erwähnt. Allerdings habe ich keine Lösung gesehen und was ich versucht habe, funktioniert nicht, also habe ich mich gefragt, ob jemand einen Weg gefunden hat, wie es auf 7.1 funktioniert?
Edit:
Dies ist das Datenobjekt:
data class MyData(val accountNumber: String, val date: Date, val key: Int) : Parcelable {
companion object {
@JvmField val CREATOR: Parcelable.Creator<MyData> = object : Parcelable.Creator<MyData> {
override fun createFromParcel(source: Parcel): MyData = MyData(source)
override fun newArray(size: Int): Array< MyData?> = arrayOfNulls(size)
}
}
constructor(source: Parcel) : this(
source.readString(),
source.readSerializable() as Date,
source.readInt()
)
override fun describeContents() = 0
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeString(accountNumber)
dest.writeSerializable(date)
dest.writeSerializable(key)
}
}
Auszug aus dem Protokoll beim Aufruf val data = intent.getParcelableExtra<MyData>("data")
05-19 21: 06: 37,076 8150-8220 /com.wolfbane.example V/FA: Aktivität fortgesetzt, Zeit: 864865 05-19 21: 06: 37.098 8150-8154/com.wolfbane.example I/art: Teilweise Codecache sammeln Ionen, Code = 47KB, Daten = 47KB 05-19 21: 06: 37.098 8150-8154/com.wolfbane.example I/art: Nach Code-Cache-Sammlung, Code = 45 KB, Daten = 46 KB 05-19 21:06 : 37.098 8150-8154/com.wolfbane.example I/art: Erhöhung der code cache kapazität zu 256KB 05-19 21: 06: 37.102 8150-8154/com.wolfbane.beispiel I/art: JIT zugeteilt 61KB für kompilierten code von void android.widget.TextView. (android.content.Context, android.util.AttributeSet, int, int) 05-19 21: 06: 37.102 8150-8154/com.wolfbane.beispiel I/art: Compiler zugeordnet 4MB zu kompilieren void android.widget.TextView. (android.content.Context, android.util.AttributeSet, int, int) 05-19 21: 06: 37.151 8150-8154/com.wolfbane.beispiel I/art: Voll Code ausführen Cachesammlung, Code = 111 KB, Daten = 79 KB 05-19 21: 06: 37.151 8150-8154/com.wolfbane.example I/art: Starten eines blockierenden GC JitCodeCache 05-19 21: 06: 37,151 8150-8154/com.wolfbane.example I/art: Nach Code-Cache-Sammlung, Code = 71KB, Daten = 40KB 05-19 21: 06: 42.079 8150-8220/com.wolfbane .beispiel V/FA: Inaktivität, Trennung vom Service 05-19 21: 06: 42.829 8150-8157/com.wolfbane.beispiel I/art: Starten eines blockierenden GC Instrumentation 05-19 21: 07: 04.396 8150- 8157/com.wolfbane.example W/art: alle Themen Suspendieren nahm: 10.531ms
:
Dann auf der Empfangsseite die Daten wie folgt lauten würde Erhalten Sie gerade 'null' von der Absicht zurück? Sind Sie sicher, dass die übergebenen Daten "Parcelable" sind? –
Ja das ist richtig, es ist immer Null. Ja, es ist parzellierbar. Beachten Sie, dass es auf Lollipop ohne Probleme funktioniert. – WolfBane
Ist das Datenobjekt 'Parcelable'? –