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". Kann mir jemand helfen?
MainActivity:
und AlarmReceiver:
Besten Dank und Grüße
KarlNapp
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". 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()
}
}
und AlarmReceiver:
Code:
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()
}
}
Besten Dank und Grüße
KarlNapp