简体   繁体   中英

Android: Set Alarm does not trigger

I am writing a basic program that triggers an alarm after 5 seconds. However, even after 30 seconds, the alarm is not triggered (the print statement that I have in my individual alarm controller is not executed). This seems strange, considering that it seems that I have calculated the time of the alarm correctly, fed a PendingIntent containing the alarm controller ( AlarmReceiver ) to my AlarmManager , and specified the AlarmReceiver class as a receiver in my AndroidManifest.xml file.

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>

Have you tried using AlarmManagerCompat ?


// Initialize the alarm signal
val intent = Intent(applicationContext, AlarmReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(applicationContext, 1, intent, 0)

val alarmManager = applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager


AlarmManagerCompat.setExactAndAllowWhileIdle(
     alarmManager,
     AlarmManager.ELAPSED_REALTIME_WAKEUP,
     SystemClock.elapsedRealtime() + (5 * DateUtils.SECOND_IN_MILLIS),
     pendingIntent
)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM