Hallo in die Runde,
ich bin neu in Kotlin und möchte eine App programmieren, in der alle 15 Min eine Glocke schlägt, wie bei einer Kirchturmuhr. Das klappt auch insoweit bis zu dem Punkt, wo ich die nächste "Weckzeit" stellen will (Befehl "instance.zeitStellen()" im Alarm Receiver). Dann stürzt die App ab mit einer "NullPointerException". Ich bin da schon stundenlang am "hirnen", komme aber leider nicht weiter. Kann mir jemand helfen?
MainActivity:
Java
package com.example.alarmtest01
import android.app.AlarmManager
import android.app.PendingIntent
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.media.MediaPlayer
import android.os.Bundle
import android.widget.Toast
import androidx.activity.ComponentActivity
import java.util.Calendar
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
zeitStellen()
}
public fun zeitStellen() {
val intent = Intent(this, AlarmReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(
this, 0,
intent, PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_MUTABLE
)
val alarmManager = getSystemService(ALARM_SERVICE) as AlarmManager
val zeit = Calendar.getInstance()
var minute = zeit.get(Calendar.MINUTE)
var stunde = zeit.get(Calendar.HOUR)
if (minute < 15) minute = 15
else if (minute < 30) minute = 40
else if (minute < 45) minute = 45
else {
minute = 0
stunde++
}
zeit.set(
zeit.get(Calendar.YEAR),
zeit.get(Calendar.MONTH),
zeit.get(Calendar.DAY_OF_MONTH),
stunde,
minute
)
alarmManager[AlarmManager.RTC_WAKEUP, zeit.timeInMillis] = pendingIntent
Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show()
}
}
Alles anzeigen
und AlarmReceiver:
Java
package com.example.alarmtest01
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.media.MediaPlayer
import android.widget.Toast
class AlarmReceiver : BroadcastReceiver() {
var mMediaPlayer: MediaPlayer? = null
val instance = MainActivity()
override fun onReceive(context: Context, intent: Intent) {
Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show()
fun playSoundHell() {
if (mMediaPlayer == null) {
mMediaPlayer = MediaPlayer.create(context, R.raw.alte_kirche_einzelschlag_hell)
mMediaPlayer!!.start()
} else mMediaPlayer!!.start()
}
fun playSoundHellEnde() {
if (mMediaPlayer == null) {
mMediaPlayer = MediaPlayer.create(context, R.raw.alte_kirche_einzelschlag_hell_ende)
mMediaPlayer!!.start()
} else mMediaPlayer!!.start()
}
fun bimmelGlockeHell(anzahl: Int) {
if (anzahl > 0) {
for (i in 1..anzahl) {
println(i)
playSoundHell()
while (mMediaPlayer!!.isPlaying) {
// warten
}
}
mMediaPlayer!!.release()
mMediaPlayer = null
}
playSoundHellEnde()
while (mMediaPlayer!!.isPlaying) {
// warten
}
mMediaPlayer!!.release()
mMediaPlayer = null
}
//AsyncTask.execute {
bimmelGlockeHell(3)
//}
instance.zeitStellen()
}
}
Alles anzeigen
Besten Dank und Grüße
KarlNapp