【发布时间】:2021-02-01 01:42:53
【问题描述】:
我正在编写一个在 5 秒后触发警报的基本程序。但是,即使在 30 秒后,也不会触发警报(我的个人警报控制器中的打印语句没有执行)。这似乎很奇怪,考虑到我似乎已经正确计算了警报时间,将包含警报控制器 (AlarmReceiver) 的 PendingIntent 发送到我的 AlarmManager,并将 AlarmReceiver 类指定为接收器我的 AndroidManifest.xml 文件。
MainActivity.kt
import android.app.AlarmManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
try {
// Initialize the time in which we want to trigger the alarm
val currTimeMs = System.currentTimeMillis()
val fiveSecsLaterMs = currTimeMs + 5 * 1000
println("currTimeMs = $currTimeMs")
println("fiveSecsLaterMs = $fiveSecsLaterMs")
// Initialize the alarm signal
val intent = Intent(applicationContext, AlarmReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(applicationContext, 1, intent, 0)
// Send the alarm signal to our AlarmManager
val alarmManager = applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager
alarmManager[AlarmManager.RTC_WAKEUP, fiveSecsLaterMs] = pendingIntent
} catch (e: Exception) {
println("Cannot print alarm!")
}
}
}
AlarmReceiver.java:
package com.example.alarmtestsetter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.widget.Toast;
public class AlarmReceiver extends BroadcastReceiver {
MediaPlayer mp;
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("RECEIVED ALARM!!!!");
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(context, notification);
r.play();
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.alarmtestsetter">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".AlarmReceiver" android:process=":remote" />
</application>
</manifest>
【问题讨论】:
标签: java android kotlin android-intent android-alarms